设计模式之创建型模式:原型(Prototype )

意图

用原型示例指定创建对象的种类,并且通过拷贝这些原型创建新的对象

                                                                                                                                                                ----《设计模式》GOF

适用性

当一个系统应该独立于它的产品创建,构成和表示时,要使用Prototype模式;以及

  • 当要实例化的类在运行时刻指定时,例如通过动态装载
  • 为了避免创建一个与产品类层次平行的工厂类层次时
  • 当一个类的实例只能由几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化更方便;

结构

 

参与者

  • Prototype
  1. 声明一个克隆自身的接口
  • ConcretePrototype
  1. 实现一个自身克隆自身的操作
  • Client
  1. 让一个原型克隆自身从而创建一个新的对象

协作

  • 客户请求一个原型克隆自身

效果

  • 运行时刻增加和删除产品
  • 改变值以指定新对象
  • 改变结构以指定新对象
  • 减少子类的创建
  • 用类动态配置应用

实现

  • 使用一个原型管理器
  • 实现克隆操作
  • 初始化克隆对象

代码示例


    class PrototypeStructure
    {
        public void Test()
        {
            Prototype p = new ConcretePrototype("11");
            Prototype p2 = (ConcretePrototype)p.Clone();

            Console.WriteLine(p.GetType().Name+"---Id--"+p.ID);
            Console.WriteLine(p2.GetType().Name + "---Id--" + p2.ID);

        }
       
    }

    abstract class Prototype
    {
        private string _id = "0";
        public Prototype(string id)
        {
            this._id = id;
        }
       public abstract Prototype Clone();

        public String ID {
            get { return this._id; }
        }
    }

    class ConcretePrototype : Prototype
    {
        private string _id = "1";
        public ConcretePrototype(string id):base(id)
        {
        }

        public override Prototype Clone()
        {
            return (Prototype)this.MemberwiseClone();
        }
    }

结果:

 ConcretePrototype-- - Id--11
 ConcretePrototype-- - Id--11

 


如有问题,欢迎斧正!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值