ymkNK / ymkNK.github.io

Personal Blog
https://lllovol.com
2 stars 0 forks source link

设计模式-Prototype原型模式 #114

Open ymkNK opened 2 years ago

ymkNK commented 2 years ago

https://lllovol.com/p/2021/9/prototype/

场景 有一个object,想要生成与之完全相同的复制品,该如何是实现? 问题: 私有数据 不想包含具体的包 如果原始的对象只是一个接口,具体类都不知道,怎么处理呢? 方案 将克隆过程,委派给被克隆的实际对象,由实际对象负责clone 因此,只要实现了clone()方法的,就是原型模式 实现 原型(Prototype)接口对clone方法做一个申明,绝大部分情况下,里面只有一个名为clone的方法 具体原型(ConcretePrototype)类实现接口 客户端(Client)可以复制实现了原型接口的任何对象 应用 将自身作为构造函数的参数传入 复制数组 如果需要复制一些对象,同时又希望代码独立于这些对象所属的具体类 如果子类的区别仅在于对象的初始化方式,那么可以使用该模式减少子类的数量,别人创建这些子类的目的可能只是为了创建特定的对象。 优点 克隆时 无需与所属的具体类耦合 克隆原型 防止反复运行初始化 更方便的生成复杂对象 可以用继承以外的方式来处理复杂对象的不同配置 缺点 克隆博涵循环引用的复杂对象可能会非常麻烦