Prototype
概述:
通过复制生成实例
说明:
1.本文仅仅是对 图解设计模式 的简单总结(个人笔记).
2.文章中的图片均来自本书,添加水印只是为了防止盗链行为,并无侵权的想法.
综上,若侵权, 请联系我删除!
转载请标注出处!
案例:
案例说明:
将字符串放入方框中显示出来或者是加上上下划线显示出来
主要代码:
Manager.java
package Gof.Prototype.framework; import java.util.*; public class Manager { private HashMap showcase = new HashMap(); public void register(String name, Product proto) { showcase.put(name, proto); } public Product create(String protoname) { Product p = (Product)showcase.get(protoname); return p.createClone(); } }
代码链接:传送门
uml综述
Prototype (原型): 负责定义用于复制现有实例生成新实例的方法
ConcretePrototype(具体原型) :实现生成新实例的方法
Client(使用者): 负责使用复制实例的方法生成新实例
收获:
- prototype 使用范围:
- 对象中类繁多,无法整合到一个类中
- 难以根据类生成实例
- 想要接欧框架与生成的实例时
- 一旦类中使用了其他类,就意味着该类与其他类紧密的耦合在一起
- 一旦在代码中出现要使用的类的名字,就无法与该类分离开,也就无法实现复用
- 该类能否被复用: 即使没有java 文件可以复用该类才是关键
- java方法里的clone . 被复制的类必须实现java.lang.Clonable接口(标记接口,没有任何的申明方法)
- clone 方法都是在java.lang.Object中定义,另外,java.lang.Object中并没有实现Cloneable接口.若实现的话,所有的类都不在抛出异常!
- clone 方法的复制为浅复制, 如对于数组而言只是复制其引用,不会复制数组中的元素
相关设计模式:
- Prototype: 生成一个与当前实例一模一样的新的实例
- Flyweight : 可以在不同的地方使用同一个实例
- Memento : 可以保存当前的实例,实现快照与撤销功能
- Composite 与 Decorator : 两者连用,可以创建复杂的动态实例,需要Prototype 参与
- Command : 复制出现过的命令, Prototype 方式实现
注意:
此部分内容属于对GOF Design Pattern知识的初步认知阶段,参考书籍是结城浩的《图解设计模式》,简单易懂,十分推荐!
以上内容,作者一字一句码出来的,纯属不易,欢迎大家转载,转载是还请您表明出处。另外如果我有侵权行为,请在下方留言,确认后我会及时撤销相应内容,谢谢大家!
PS:欢迎大家来到我的小站,鸣谢!
猜你喜欢