Prototype

概述:

通过复制生成实例

Prototype_sample


说明:

1.本文仅仅是对 图解设计模式 的简单总结(个人笔记).
2.文章中的图片均来自本书,添加水印只是为了防止盗链行为,并无侵权的想法.
综上,若侵权, 请联系删除!
转载请标注出处!


案例:

  • 案例说明:

    将字符串放入方框中显示出来或者是加上上下划线显示出来

  • Prototype_uml_case

  • 主要代码:

  • 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_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:欢迎大家来到我的小站,鸣谢!