谈谈设计模式~原型模式(Prototype)

返回目录

原型模式是创建型模式的一种,其特点在于通过“复制”一个已经存在的实例来返回新的实例(clone),而不是新建(new)实例。被复制的实例就是我们所称的“原型”,这个原型是可定制的。

原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效;或者创建值相等,只是命名不一样的同类数据。

从原型模式的概念中,我们可以看到,在这个模式里,拷贝是个很重要的概念,即在不创建对象的情况下,返回一个已有对象,这就是拷贝去实现的,在面向对象的编程世界里,拷贝分为浅拷贝和深拷贝,如果希望对两者有更深入的认识,

可以阅读我的这篇文章《不忘本~浅拷贝和深拷贝》。

何时能用到它?

当你一个大对象被创建后,它可以在程序里被使用多次,而使用的时候可能有些属性值会发生变化,这里,你不需要重新去new这个对象,而可以使用原型模式去克隆这个对象,这样,可以提交程序的性能。

策略模式的结构图

策略模式实现说明

CarPrototype:抽象原型,定义一个克隆的方法,返回规定的原型

ConcteteCarPrototype:具体原型,实现了抽象原来的克隆,并返回了这类抽象原型,在具体原型中,还提供了某体的属性和方法等

CarManagerL:原型管理器,这个管理员用于被前台(UI)去调用,它用来存储原型集合

策略模式的C#实现

#region 原型模式
    abstract class CarPrototype
    {
        public abstract CarPrototype Clone();
    }

    class ConcteteCarPrototype : CarPrototype
    {
        private string _body, _color, _wheal;
        public ConcteteCarPrototype(string body, string color, string wheal)
        {
            this._body = body;
            this._color = color;
            this._wheal = wheal;
        }
        public override CarPrototype Clone()
        {
            //实现浅表拷贝
            return (CarPrototype)this.MemberwiseClone();
        }
        public void Display(string _carName)
        {
            Console.WriteLine("{0}‘s Cart Values are: {1},{2},{3}",
                _carName, _body, _color, _wheal);
        }
    }

    class CarManager
    {
        Hashtable colors = new Hashtable();
        public CarPrototype this[string name]
        {
            get
            {
                return (CarPrototype)colors[name];
            }
            set
            {
                colors.Add(name, value);
            }
        }
    }

    #endregion

调用代码

 CarManager colormanager = new CarManager();

            //初始化
            colormanager["奥迪"] = new ConcteteCarPrototype("德国", "黑色", "四轮驱动");
            colormanager["奇端"] = new ConcteteCarPrototype("中国", "白色", "前轮驱动");

            //调用

            ConcteteCarPrototype c1 = (ConcteteCarPrototype)colormanager["奇端"].Clone();
            c1.Display("奇端");

            Console.ReadLine();

结果截图

返回目录

谈谈设计模式~原型模式(Prototype)

时间: 2024-10-13 19:26:40

谈谈设计模式~原型模式(Prototype)的相关文章

[工作中的设计模式]原型模式prototype

一.模式解析 提起prototype,最近看多了js相关的内容,第一印象首先是js的原型 var Person=function(name){ this.name=name; } Person.prototype.run=function(){ alert(this.name+" is running"; } 此处的原型是js的特殊定义,在原型上定义的属性和方法所有的类进行共享. 不过设计模式中的原型模式指的是:将已有的对象作为原型,拷贝出一份具有相同属性的新的对象. 模式定义为:原型

java语言实现创建型设计模式—原型模式(Prototype)

一.描述 原型模式是通过一个原型对象来标明要创建的对象的类型,然后用复制这个原型对象的方法来拷贝创建更多的同类型对象.例如我们在程序的动态运行过程中有了一个对象,这个对象中包含了一系列的有效数据,我们此时需要一个和该对象完全相同的新对象,并且在拷贝之后,新旧对象之间没有任何联系,对任何一个对象的更改都不影响另一个对象. 在java中所有类都默认继承自java.lang.Object类,在这个Object类中有一个clone()方法,该方法将返回Object对象的一个拷贝. 我们让需要被拷贝的类实

设计模式:原型模式(Prototype)

以前听过这样一句话:“程序员的最高境界就是Ctrl+C.Ctrl+V”,我们先不论这句话的对错,就论这个过程,这个过程我们都知道无非就是复制一个对象,然后将其不断地粘贴.这样的过程我们可以将其称之为“克隆”.再如我们应聘的时候打印了那么多的简历. 克隆我们都清楚,就是用一个物体复制若干个一模一样物体.同样,在面向对象系统中,我们同样可以利用克隆技术来克隆出若干个一模一样的对象.在应用程序中,有些对象比较复杂,其创建过程过于复杂,而且我们又需要频繁的利用该对象,如果这个时候我们按照常规思维new该

二十四种设计模式:原型模式(Prototype Pattern)

原型模式(Prototype Pattern) 介绍用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象. 示例有一个Message实体类,现在要克隆它. MessageModel using System; using System.Collections.Generic; using System.Text; namespace Pattern.Prototype { /// <summary> /// Message实体类 /// </summary> publi

深入浅出设计模式——原型模式(Prototype Pattern)

模式动机在面向对象系统中,使用原型模式来复制一个对象自身,从而克隆出多个与原型对象一模一样的对象.在软件系统中,有些对象的创建过程较为复杂,而且有时候需要频繁创建,原型模式通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象,这就是原型模式的意图所在. 模式定义原型模式(Prototype Pattern):原型模式是一种对象创建型模式,用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象.原型模式允许一个对象再创建另外一个可定制的对象,无

10. 星际争霸之php设计模式--原型模式

题记==============================================================================本php设计模式专辑来源于博客(jymoz.com),现在已经访问不了了,这一系列文章是我找了很久才找到完整的,感谢作者jymoz的辛苦付出哦! 本文地址:http://www.cnblogs.com/davidhhuan/p/4248189.html============================================

JAVA 设计模式 原型模式

用途 原型模式 (Prototype) 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型模式是一种创建型模式. 结构 图-原型模式结构图 Prototype: 声明一个克隆自身的接口.ConcretePrototype: 实现克隆自身的具体操作.Client: 调用 Prototype 来克隆自身,从而创建一个新对象. 应用场景 当要实例化的类是在运行时刻指定时,例如,通过动态装载.为了避免创建一个与产品类层次平行的工厂类层次时.当一个类的实例只能有几个不同状态组合中的一种

炒冷饭系列:设计模式 原型模式

炒冷饭系列:设计模式 原型模式 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 亲爱我,孝何难:亲恶我,孝方贤. 一.什么是原型模式 Prototype模式是一种对象创建型模式,它採取复制原型对象的方法来创建对象的实例.使用 Prototype模式创建的实例,具有与原型一样的 数据. 二.原型模式的特点 1. 由原型对象自身创建目标对象.也就是说,对 象创建这一动作发自原型对象本身. 2.目标对象是原型对象的一个克隆

设计模式--原型模式

原型模式 Prototype Pattern 意图:使用原型实例定义/指定被创建对象种类/类型,通过拷贝原型实例创建新对象 应用场景: 1)当某个类指定在运行时实例化 2)减少子类数量 3)降低昂贵类型新对象创建成本 好处或缺点: 1)clone方法可能实现比较困难 2)不适用于含循环引用的类结构 类结构: 参与者:client ,Prototype,ConcretePrototype prototype:定义原型的行为 //关键代码 class Notification implements