原型模式篇

标签: #Share

官方解释

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。

命令模式生活中使用

用原型模式实现细胞分裂

分析:所有细胞的构造,构造都相同,无需重新从无到有的创建,而是以类似克隆的方式即可

官方示例

Head First:https://www.cnblogs.com/xcsn/p/7352136.html

菜鸟教程:https://www.runoob.com/design-pattern/prototype-pattern.html

简书:https://www.jianshu.com/p/1e41ee3ac4b5

工作举例

详情见:https://github.com/kkzhilu/KerwinTools/tree/master/src/main/java/design/pattern
原型模式相关

总结

/**
 * 总结
 *    原型模式分为:
 *        Shallow cloning 浅克隆
 *        Deep cloning    深克隆
 *       (实质是Java中关于引用传递的问题)
 *
 * 特点
 *    A. 原型模式克隆,不会克隆final关键字的对象,两者不可兼容,另外克隆不会执行构造方法(内存操作,无视构造方法和访问权限)
 *    B. 原型模式是在内存二进制流的拷贝,要比直接new一个对象性能好很多,特别是在一个循环体内产生大量的对象时,原型模式可以更好地体现其优点
 *    C. 从工厂方法到模板...到原型模式  创建对象的方式慢慢从编码过度到基于内存
 *
 * 浅度克隆:当被克隆的类中有引用对象(String或Integer等包装类型除外)时,
 *    克隆出来的类中的引用变量存储的还是之前的内存地址,也就是说克隆与被克隆的对象是同一个
 *    这样的话两个对象共享了一个私有变量,所有人都可以改,是一个种非常不安全的方式,在实际项目中使用还是比较少的
 *
 * 深度拷贝:final 类型修饰的成员变量不能进行深度拷贝
 *
 * 使用场景:
 *     1、在创建对象的时候,我们不只是希望被创建的对象继承其基类的基本结构,还希望继承原型对象的数据。
 *   2、希望对目标对象的修改不影响既有的原型对象(深度克隆的时候可以完全互不影响)。
 *   3、隐藏克隆操作的细节,很多时候,对对象本身的克隆需要涉及到类本身的数据细节。
 *   4、类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等;
 *   5、通过 new 产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式;
 *   6、一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象供调用者使用
 *    在实际项目中,原型模式很少单独出现,一般是和工厂方法模式一起出现,通过 clone的方法创建一个对象,
 *    然后由工厂方法提供给调用者。
 */

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

命令模式 上一篇
商品治理 下一篇