博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
谈谈设计模式~原型模式(Prototype)
阅读量:6095 次
发布时间:2019-06-20

本文共 1920 字,大约阅读时间需要 6 分钟。

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

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

可以阅读我的这篇文章《》。

何时能用到它?

当你一个大对象被创建后,它可以在程序里被使用多次,而使用的时候可能有些属性值会发生变化,这里,你不需要重新去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();

结果截图

 本文转自博客园张占岭(仓储大叔)的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
充分利用HTML标签元素 – 简单的xtyle前端框架
查看>>
设计模式(十一):FACADE外观模式 -- 结构型模式
查看>>
iOS xcodebuile 自动编译打包ipa
查看>>
程序员眼中的 SQL Server-执行计划教会我如何创建索引?
查看>>
【BZOJ】1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路(floyd)
查看>>
cmake总结
查看>>
数据加密插件
查看>>
linux后台运行程序
查看>>
win7 vs2012/2013 编译boost 1.55
查看>>
IIS7如何显示详细错误信息
查看>>
ViewPager切换动画PageTransformer使用
查看>>
coco2d-x 基于视口的地图设计
查看>>
C++文件读写详解(ofstream,ifstream,fstream)
查看>>
Android打包常见错误之Export aborted because fatal lint errors were found
查看>>
Tar打包、压缩与解压缩到指定目录的方法
查看>>
新手如何学习 jQuery?
查看>>
配置spring上下文
查看>>
Python异步IO --- 轻松管理10k+并发连接
查看>>
mysql-python模块编译问题解决
查看>>
java 中getDeclaredFields() 与getFields() 的区别
查看>>