`

PrototypePattern

阅读更多

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

 

原型模式基于.net中深拷贝和浅拷贝的概念.

注意:如果不明白深拷贝和浅拷贝的概念请查看:http://jhxk.iteye.com/blog/373211

 

 

适用性
1).当要实例化的类是在运行时刻指定时,例如,通过动态装载

 

2).为了避免创建一个与产品类层次平行的工厂类层次时
什么叫做与产品类平行的工厂类层次?
当你去产生一个产品类必然要有一个工厂,第二个产品又有第二个工厂,
这样工厂非常多.通过原型模式就能有效的避免这点.

 

3).当一个类的实例只能有几个不同状态组合中的一种时.建立相应数目
的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些.

原型模式的构成

 

组成:
抽象原型类(Prototype):定义具有克隆自己方法的接口.
具体原型类(ConcretePrototype):实现具体的克隆方法.
客户类(Client):通过克隆生成一个新的对象.

 

实际上PrototypePattern非常简单
比如:我想去创建一个对象,但是我不想通过工厂方或new的方式去创建
我想根据已有对象的状态去创建一个新的对象.
那么当你创建完一个对象再克隆一个对象,对克隆的对象进行微小的修
改就可以直接使用了,而并不需要复杂的一些对象创建过程.比较方便.

 

ClassDiagram:

 

 

SequenceDiagram:

 

示例:

    class client
    {
        public static void Main(String[] args)
        {
            ConcretePrototype1 p1 = new ConcretePrototype1("I");

            ConcretePrototype1 c1 = p1.Clone() as ConcretePrototype1;

            Console.WriteLine("Cloned:{0}", c1.Id);

            ConcretePrototype2 p2 = new ConcretePrototype2("II");

            ConcretePrototype2 c2 = p2.Clone() as ConcretePrototype2;

            Console.WriteLine("Cloned:{0}", c2.Id);

            Console.ReadKey();
        }
    }

    /// <summary>
    /// 抽象原型类
    /// </summary>
    abstract class Prototype
    {
        private string id;

        public Prototype(string id)
        {
            this.id = id;
        }

        public string Id
        {
            get { return id; }
        }

        public abstract Prototype Clone();
    }

    /// <summary>
    /// 具体原型类1
    /// </summary>
    class ConcretePrototype1 : Prototype
    {
        public ConcretePrototype1(string id)
            : base(id)
        {

        }

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

    class ConcretePrototype2 : Prototype
    {
        public ConcretePrototype2(string id)
            : base(id)
        {

        }

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

 

  • 大小: 29.9 KB
  • 大小: 3.5 KB
分享到:
评论

相关推荐

    Prototype Pattern原型模式

    **原型模式(Prototype Pattern)**是一种基于克隆的创建型设计模式,它的主要目的是为了提高创建新对象的效率,特别是当创建新对象的过程复杂或者资源消耗较大时。在原型模式中,一个已经创建的对象(称为原型)被...

    c++-设计模式之原型模式(Prototype Pattern)

    原型模式(Prototype Pattern)是一种创建型设计模式,允许通过复制现有对象来创建新对象,而不是通过类构造器。这种模式常用于需要频繁创建相似对象的场景,能够提高性能并减少内存使用。 原型模式的组成 原型接口...

    原型模式 Prototype Pattern

    ### 原型模式 Prototype Pattern #### 概述 原型模式是一种创建型设计模式,它允许用户通过复制现有的实例来创建新的对象,而不是通过传统的构造器来创建对象。这种模式适用于那些创建对象的成本较高,或者当对象...

    创建型模式之原型模式(Prototype Pattern)

    **原型模式(Prototype Pattern)详解** 在软件设计中,原型模式是一种创建型设计模式,它提供了一种通过复制已有对象来创建新对象的方式,避免了重复的构造过程,提高了代码的效率和可维护性。原型模式的核心思想...

    [创建型模式]设计模之原型模式(Prototype Pattern)

    **原型模式(Prototype Pattern)**是一种创建型设计模式,它允许我们通过复制现有的对象来创建新对象,而不是通过构造函数或工厂方法。这种模式的核心在于,它提供了一种更高效、更灵活的方式来创建新实例,特别是在...

    原型模式(Prototype Pattern)原理图

    原型模式是一种创建型设计模式,它通过复制一个现有的对象来创建新的对象,而不是通过调用构造函数的方式。这种方式可以在运行时动态地创建和修改对象,而不需要知道具体的创建细节 。 原型模式的基本概念包括以下...

    .NET设计模式(6):原型模式(PrototypePattern)

    ### .NET设计模式(6):原型模式(Prototype Pattern) #### 概述 在软件工程领域,设计模式提供了一系列经过验证的解决方案,帮助开发者解决常见的软件设计问题。本篇文章聚焦于.NET框架下的“原型模式”...

    php示例详解Constructor Prototype Pattern 原型模式

    抽象原型(Prototype)角色:声明一个克隆自己的接口 具体原型(Concrete Prototype)角色:实现一个克隆自己的操作 当一个类大部分都是相同的只有部分是不同的时候,如果需要大量这个类的对象,每次都重复实例化那些...

    常见设计模式的解读和对应代码示例,包括设计原则和软件工程中类之间的依赖关系

    原型模式(Prototype Pattern) 结构型模式(Structural Pattern) 适配器模式(Adapter/Wrapper Pattern) 桥接模式(Bridge Pattern) 装饰模式(Decorator Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern)

    C#版 24种设计模式

    适配器模式(Adapter Pattern) 提供者模式(Provider Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 原型模式(Prototype Pattern) 责任链模式(Chain of Responsibility Pattern) 中介者模式...

    Prototype模式

    **原型模式(Prototype Pattern)**是一种创建型设计模式,它提供了一种通过复制已有对象来创建新对象的方式,而不是通过构造函数。在某些情况下,当创建新对象的成本非常高时(例如,对象需要大量的初始化操作或者从...

    原型设计模式prototype

    **原型设计模式(Prototype Pattern)**是一种创建型设计模式,它允许我们通过复制现有的对象来创建新对象,而不是通过构造函数来实例化新对象。在面向对象编程中,当我们需要频繁地创建具有相同或相似属性的对象时,...

    Prototype模式练习

    **原型模式(Prototype Pattern)**是一种常用的软件设计模式,它的主要思想是通过复制已有对象来创建新的对象,从而减少创建新对象的成本。在Java等面向对象编程语言中,原型模式经常被用来实现对象的克隆。在给定的...

    用Java实现23种设计模式

    原型模式(Prototype Pattern) 2. 结构型模式 适配器模式(Adapter Pattern) 桥接模式(Bridge Pattern) 过滤器模式(Filter、Criteria Pattern) 组合模式(Composite Pattern) 装饰器模式(Decorator ...

    设计模式PPT

     原型模式(Prototype Pattern)  单例模式(Singleton Pattern) 结构型模式用来处理类或者对象的组合,主要包含以下7种设计模式:  适配器模式(Adapter Pattern)  桥接模式(Bridge Pattern)  组合...

    设计模式_原型模式.zip

    原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当...

    C#设计模式-吕震宇

    C#设计模式(9)-Prototype Pattern C#设计模式(8)-Builder Pattern C#设计模式(7)-Singleton Pattern C#设计模式(6)-Abstract Factory Pattern C#设计模式(5)-Factory Method Pattern C#设计模式(4)...

    [创建型模式] 原型模式的理解

    // PrototypePattern.h class Prototype { public: virtual ~Prototype() {} // 虚函数克隆接口 virtual Prototype* clone() const = 0; }; ``` 2. **具体原型(Concrete Prototypes)**:实现原型接口,提供...

Global site tag (gtag.js) - Google Analytics