zoukankan      html  css  js  c++  java
  • 原型模式

    原型模式用一个原型对象来指明所要创建的对象类型,然后用复制这个原型对象的方法来创建出更多的同类型对象。

    原型模式的优点有:

    1. 原型模式向客户隐藏了创建新实例的复杂性
    2. 原型模式允许动态增加或较少产品类。
    3. 原型模式简化了实例的创建结构,工厂方法模式需要有一个与产品类等级结构相同的等级结构,而原型模式不需要这样。
    4. 产品类不需要事先确定产品的等级结构,因为原型模式适用于任何的等级结构

    原型模式的缺点有:

    1. 每个类必须配备一个克隆方法
    2.  配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。.
     1     /// 创建原型
     2     /// </summary>
     3     public abstract class MonkeyKingPrototype
     4     {
     5         public string Id { get; set; }
     6 
     7         public MonkeyKingPrototype(string id)
     8         {
     9             this.Id = id;
    10         }
    11         //克隆方法
    12         public abstract MonkeyKingPrototype Clone();
    13     }
    14 
    15     /// <summary>
    16     /// 创建具体原型
    17     /// </summary>
    18     public  class ConcretePrototype :MonkeyKingPrototype
    19     {
    20         public ConcretePrototype(string id)
    21             : base(id)
    22         { }
    23 
    24         public override MonkeyKingPrototype Clone()
    25         {
    26             return (MonkeyKingPrototype)this.MemberwiseClone();
    27         }
    28     }

    客户端

     1             Console.WriteLine("【原型模式】");
     2             Console.WriteLine();
     3 
     4             //原型
     5             MonkeyKingPrototype prototypeMonkeyKing = new ConcretePrototype("MonkeyKing");
     6 
     7             //变体1
     8             MonkeyKingPrototype cloneMonkeyKing = prototypeMonkeyKing.Clone() as ConcretePrototype;
     9             Console.WriteLine("Clone1:	" + cloneMonkeyKing.Id);
    10 
    11             //变体2
    12             MonkeyKingPrototype cloneMonkeyKing2 = prototypeMonkeyKing.Clone() as ConcretePrototype;
    13             Console.WriteLine("Clone2:	" + cloneMonkeyKing2.Id);
    14 
    15             Console.ReadLine();

     原型模式的类图

  • 相关阅读:
    jquery全屏幻灯轮播焦点图
    PHP curl 上传文件版本兼容问题
    一个网站同一域名不同目录下的文件访问到的cookie值不同是什么原因?
    Linux系统查找清理磁盘大文件方法
    REDIS常用命令
    CentOS 6.4安装pip,CentOS安装python包管理安装工具pip的方法
    centos6 编译安装nodejs4.3
    centos yum安装php5.6.19 remi源按照
    Mac下用brew搭建PHP(LNMP/LAMP)开发环境
    为什么JAVA要提供 wait/notify 机制?是为了避免轮询带来的性能损失
  • 原文地址:https://www.cnblogs.com/Andy-Li/p/7263019.html
Copyright © 2011-2022 走看看