0%

设计模式笔记(七):创建型-原型模式

##原型模式:(Prototype Pattern)
####意图
用原型实例来指定创建对象的种类,并且通过拷贝这些原型创建新的对象
####主要解决
在运行期建立和删除原型
####何时使用
1:当一个系统应该独立于它产品创建构成和表示的时候。
2:当要实例化的类是在运行时刻指定的时候 ,例如动态装载
3:为了避免创建一个与产品类层次平行的工厂类层次
4:当一个类的实例智能有几个不同状态组合中的一种时候,建立相应数目的原型并克隆他们 比每次用合适的状态的手工实例化该 类更方便一些
####如何解决
利用已有的一个原型对象,快速生成和原型对象一样的实例
####关键代码
1:实现克隆操作 利用Cloneable 重写clone(),
2:原型模式同样用于隔离类对象使用者和具体类型(易变类)之间耦合关系,要求易变类拥有稳定的接口
####实例
1:细胞分裂
2:java object clone() 方法
####优点
1:提高性能
2:避免构造函数约束
####缺点
1:配备克隆方法需要对类的功能进行通盘考虑,对于全新的类不麻烦,但是对于已经有的类不容易实现,特别是一个类引用不支持串行化的间接对象或者引用含有循环结构的适合
2:必须实现Cloneable接口
3:逃避构造函数约束
####使用场景
1:资源优化
2:类初始化需要很多资源,
3:性能和安全要求场景
4:通过new产生对象需要非常繁琐的数据准备或者访问权限
5:一个对象多个修改者
6:一个对象需要提供给其他对象访问,并且多个调用者都需要修改其值,
7:实际项目中原型模式常根工厂模式一起,通过clone创建一个对象,如何由工厂方法提供给调用者,
####注意
和对一个类来实例化创建对象不同的是,原型模式是通过一个现有的对象生成一个新的对象,浅拷贝通过Cloneable ,深拷贝通过Serializable读取二进制流
####总结:通过实现cloneable的clone() 方法来实现浅克隆 通过序列化获取二进制流 来进行深度克隆 就是自行创建一个可靠安全的原型 通过克隆方式获得该对象
####代码地址:https://github.com/xuxianyu/myGitHub/tree/master/DisignPattern/src/main/java/com/xxx/create/Prototype