设计模式-原型模式实践案例
原型模式(Prototype Pattern)是一种创建型设计模式,它通过复制现有的实例来创建新的实例,而不是通过初始化过程。在 Java 中,这通常是通过实现 Cloneable 接口并定义 clone() 方法来实现的。原型模式适用于创建复制对象的成本比直接创建新实例更低的情况。
(图片来源网络,侵删)
下面是一个 Java 中实现原型模式的实践案例:
步骤1:定义原型接口
1// 定义一个实现 Cloneable 接口的原型接口 2public interface Prototype extends Cloneable { 3 Prototype clone() throws CloneNotSupportedException; 4}
步骤2:创建具体原型类
1// 创建具体原型类 2public class ConcretePrototype implements Prototype { 3 private String field; 4 5 public ConcretePrototype(String field) { 6 this.field = field; 7 } 8 9 public String getField() { 10 return field; 11 } 12 13 // 实现 clone 方法 14 @Override 15 public ConcretePrototype clone() throws CloneNotSupportedException { 16 // 浅拷贝:基本数据类型会重新创建,引用类型仍指向原对象所指向的地址 17 return (ConcretePrototype) super.clone(); 18 } 19 20 // 深拷贝实现(如果需要) 21 public ConcretePrototype deepClone() { 22 // 自行实现深拷贝逻辑 23 ConcretePrototype cloned = new ConcretePrototype(new String(this.field)); 24 // 如果有其他复杂类型的字段,需要继续创建其副本 25 return cloned; 26 } 27}
步骤3:使用原型实例创建对象
1public class Client { 2 public static void main(String[] args) { 3 ConcretePrototype prototype = new ConcretePrototype("Original"); 4 try { 5 ConcretePrototype clone = prototype.clone(); 6 System.out.println("Cloned: " + clone.getField()); 7 } catch (CloneNotSupportedException e) { 8 e.printStackTrace(); 9 } 10 } 11}
在上述代码中,ConcretePrototype 类实现了 Prototype 接口,并覆盖了 clone() 方法,以提供对象的复制逻辑。浅拷贝只会复制对象的基本数据类型的值,而所有的引用类型仍然指向原始对象,因此如果原始对象中包含复杂的对象结构,你可能需要实现深拷贝,即创建那些对象的新实例。
客户端代码通过调用 clone() 方法来复制原型实例,从而创建新对象。这种方式可以避免使用常规的构造函数来创建对象,特别是当对象的创建过程很昂贵或复杂时。
原型模式在需要频繁创建相似或相同配置的新对象时十分有用,例如,在图形编辑器中复制图形对象,在游戏中复制角色或道具等场景。这样做可以节省创建对象时的资源和时间,特别是当直接实例化对象(如通过 new 关键字)的成本很高时。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。