原型模式

Posted 柯腾_wjf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原型模式相关的知识,希望对你有一定的参考价值。

定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的实例。换句话说,原型模式就是通过复制现在已经存在的对象来创建一个新的对象,而不是使用 new 来创建一个对象。这个复制的结果有2种,一种是是浅复制,另一种是深复制。


浅复制:通过一个原型实例(这里暂称为老对象)克隆所得到的对象(这里暂时称为新对象),新对象中所有的值类型变量都含有与老对象相同的值,新对象所有的对其他对象的引用都和老对象指向同一个地方,即对引用类型来说,老对象和新对象指向同一个引用对象。

深复制:和浅复制就一点不同,那就是,新对象所有的对其他对象的引用都是指向了复制过的对象,而不再是和老对象指向同一个对象,也就是说,克隆新对象的同时,克隆了老对象的所有引用并将新对象指向这些引用。

优点:复制一个对象一般情况下会比创建一个对象性能更高。

缺点: 1、配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。 2、必须实现 Cloneable 接口。 3、逃避构造函数的约束。

结构图:

应用:
1.定义一个接口, 用来表述所有的颜色对象接口:

public interface IColorDemo 
{ 
        IColorDemo Clone();
        int Red  {  getset;  } 
        int Green  {  get;   set;  } 
        Quote quoteInstance{get;set}
}
publc class Quote{}    

2.具体类的实现代码:

 public class RedColor : IColorDemo 
 { 
        private int red; 
        private int green; 
        Quote quoteInstance{get;set}
        public int Red 
        { 
            get {  return this.red; } 
            set  {  this.red = value; } 
        } 
        public int Green 
        {
            get  {  return this.green;  } 
            set {  this.green = value; } 
        } 
}
    

//浅复制

 public Override IColorDemo Clone() 
{ 
    return (IColorDemo)this.MemberwiseClone(); 
}

//深复制,获取浅表副本的同时复制引用。

 public Override IColorDemo Clone() 
{ 
    IColorDemo color = this.MemberwiseClone(); 
    Quote q = new Quote();
    color.quoteIntance = q;
    return color; 
}

 

以上是关于原型模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之原型模式(Prototype)详解及代码示例

设计模式课程 设计模式精讲 9-2 原型模式coding

设计模式--原型模式

5.原型模式

设计模式原型模式

csharp 设计模式 - 原型 - 结构代码