0%

设计模式之构建型模式(五):原型模式

1. 原型模式概述

  • 概念

    • 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象
    • 在 Java 中,Object 的 clone() 方法就属于原型模式。可以简单理解为:原型模式就是用来克隆对象的
  • Demo

    • 奶茶类

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      public class MilkTea{
      public String type;
      public boolean ice;

      public MilkTea clone(){
      MilkTea milkTea = new MilkTea();
      milkTea.type = this.type;
      milkTea.ice = this.ice;
      return milkTea;
      }
      }
    • 下单

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      private void order(){
      MilkTea milkTeaOfJay = new MilkTea();
      milkTeaOfJay.type = "原味";
      milkTeaOfJay.ice = false;

      MilkTea yourMilkTea = milkTeaOfJay.clone();

      // 一千位粉丝都调用 milkTeaOfJay 的 clone 方法即可
      ...
      }
    • 优化

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      public class MilkTea implements Cloneable{
      public String type;
      public boolean ice;

      @NonNull
      @Override
      protected MilkTea clone() throws CloneNotSupportedException {
      return (MilkTea) super.clone();
      }
      }
      • Java 中有一个语法糖,让我们并不需要手写 clone() 方法。这个语法糖就是 Cloneable 接口,只要让需要拷贝的类实现此接口接口
      • 需要注意的是,Java 自带的 clone() 方法是浅拷贝的。也就是说调用此对象的 clone() 方法,只有基本类型的参数会被拷贝一份,非基本类型的对象不会被拷贝一份,而是继续使用传递引用的方式。如果需要实现深拷贝,必须要自己手动修改 clone() 方法才行
-------------------- 本文结束感谢您的阅读 --------------------