Net设计模式实例之原型模式( Prototype Pattern)(1)

简介:

一、原型模式简介(Brief Introduction

原型模式 (Prototype Pattern) :用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。
Specify the kind of objects to create using a prototypical instance, and create new objects by copying this prototype
浅复制与深复制区别:
浅复制,被复制的所有变量都还有与原来对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。
深复制,把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。
Net 命名空间 System 提供了一个 IConeable 接口,此接口只有一个方法 Clone() ,只需要实现这个接口就可以实现原型模式( Prototype Pattern )了。

二、解决的问题(What To Solve

当一个对象生成不是通过 New 而是通过复制旧对象的时候,可以考虑使用原型模式。

三、原型模式分析(Analysis

1、原型模式结构

 
Prototype :原型类  Clone() 方法 : 克隆自身的接口。
ConcretePrototypeA ConcretePrototypeA :原型类的具体实现。克隆一个自身的操作。

2、代码

1 、原型抽象类 Prototype
///   <summary>
///   抽象原型模式类
///   </summary>
public  abstract class Prototype
{
    private string  _id;
    public  Prototype(string  id)
     {
        this .Id = id;
     }
    public string  Id
     {
        get  { return  _id; }
        set  { _id = value ; }
     }
 
    public abstract Prototype  Clone();
}
 
2 、具体实现类 ConcretePrototypeA ConcretePrototypeB
public  class ConcretePrototypeA  : Prototype
{
    public  ConcretePrototypeA(string  id)
         base (id)
     { }
    /// <summary>
    /// Returns a shallow copy  浅拷贝
    /// </summary>
    /// <returns>a shallow copy</returns>
    public override Prototype  Clone()
     {
        return  (Prototype )this .MemberwiseClone();
     }
}
 
public  class ConcretePrototypeB :Prototype
{
    public  ConcretePrototypeB(string  id)
         base (id)
     { }
    /// <summary>
    /// a shallow copy
    /// </summary>
    /// <returns> 浅拷贝 </returns>
    public override Prototype  Clone()
     {
        return  (Prototype )this .MemberwiseClone();
     }
}
 
2 、客户端代码
static  void Main (string [] args)
{
    Prototype  pA = new ConcretePrototypeA ("A" );
    Prototype  cA = pA.Clone() as ConcretePrototypeA  ;
    Console .WriteLine("Cloned:" +cA.Id);
 
    ConcretePrototypeB  pB = new ConcretePrototypeB ("B" );
    ConcretePrototypeB  cB = (ConcretePrototypeB )pB.Clone();
    Console .WriteLine("Cloned:" +cB.Id);
    Console .ReadKey();
}

3、实例运行结果










本文转自 灵动生活 51CTO博客,原文链接:http://blog.51cto.com/smartlife/263880,如需转载请自行联系原作者

目录
相关文章
|
1月前
|
设计模式 缓存 安全
【设计模式】单例模式:确保类只有一个实例
【设计模式】单例模式:确保类只有一个实例
23 0
|
1月前
|
设计模式 安全 Java
【设计模式】原型模式
【设计模式】原型模式
|
2月前
|
设计模式 Java 关系型数据库
23种设计模式 —— 原型模式【克隆羊、浅拷贝、深拷贝】
23种设计模式 —— 原型模式【克隆羊、浅拷贝、深拷贝】
38 1
|
3月前
|
设计模式 算法 Java
行为型设计模式-策略模式(Strategy Pattern)
行为型设计模式-策略模式(Strategy Pattern)
|
11天前
|
设计模式 存储 Java
Java设计模式:解释一下单例模式(Singleton Pattern)。
`Singleton Pattern`是Java中的创建型设计模式,确保类只有一个实例并提供全局访问点。它通过私有化构造函数,用静态方法返回唯一的实例。类内静态变量存储此实例,对外仅通过静态方法访问。
16 1
|
13天前
|
设计模式 Java
小谈设计模式(10)—原型模式
小谈设计模式(10)—原型模式
|
1月前
|
设计模式 Java
设计模式之原型模式
设计模式之原型模式
|
3月前
|
设计模式 存储 JSON
Java设计模式-原型模式
原型模式也是创建对象的一种方式,它一般用在这样的场景:系统中存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂而且耗费资源。这个时候使用原型模式的克隆方式,能够节省不少时间。比如Java 类中提供的`Object clone()`就是原型模式的应用。
30 1
Java设计模式-原型模式
|
3月前
|
设计模式
设计模式 | 原型模式
设计模式 | 原型模式
21 0
|
3月前
|
设计模式 Go 开发工具
Golang设计模式——13原型模式
Golang设计模式——13原型模式
23 0