手机版

网原型模式讲解

时间:2021-09-11 来源:互联网 编辑:宝哥软件园 浏览:

原型模式的定义:

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

原型模式结构图:

创建型模式中一个比较特殊的模式-原型模式,有个最大的特点是克隆一个现有的对象,这个克隆的结果有2种,一种是浅度复制,另一种是深度复制。

创建型模式一般是用来创建一个新的对象,然后我们使用这个对象完成一些对象的操作,我们通过原型模式可以快速的创建一个对象而不需要提供专门的新的()操作就可以快速完成对象的创建,这无疑是一种非常有效的方式,快速的创建一个新的对象。

1.原型模式:浅度复制

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

///摘要///颜色接口////摘要公共接口IColor { IColor Clone();int Red { get设置;} int Green { get设置;} int Blue { get设置;} }给出红色的具体实现代码:

公共类RedColor : iColor { public int Red { get;设置;} public int Green { get设置;} public int Blue { get设置;} public IColor Clone(){ return(IColor)this .成员WiseClone();} }具体的测试代码如下:

静态void Main(string[]args){ IColor color=new RedColor();颜色。红色=255;控制台写线('红色'颜色。红色);//225 IColor color1=color .clone();颜色1。红色=224;控制台WriteLine('color1-red ' color1).红色);//224控制台写线('红色'颜色。红色);//225 }

可以发现:在我们修改颜色一对象的红色属性值,没有对颜色的属性参生影响,即对象副本的修改不会影响对象本身的状态。

2.原型模式:深度复制

深复制考虑的情况相对来说就会比较复杂,因为有可能对象是之间有继承关系或者引用关系的时候,可能我们深复制的时候就需要注意。一般来说深复制一方面可以采用种简单的深复制对象的时候的方案,还可以通过序列化的形式来进行对象的复制。下面通过序列化的形式来实现原型模式:

使用系统;使用系统。集合。通用;使用系统Linq .使用系统。文字;命名空间安慰应用程序4{ ///summary ///颜色接口////摘要公共接口IColor { IColorDemo Clone();int Red { get设置;} int Green { get设置;} int Blue { get设置;} Factroy f { get设置;} } ///摘要///生产颜色的工厂信息////摘要[Serializable]公共类Factroy {公共字符串名称{ get设置;} } }使用系统;使用系统。集合。通用;使用系统Linq .使用系统。文字;命名空间安慰应用程序4{ ///summary ///颜色////摘要[Serializable]公共类Red color : icolor { public int Red { get;设置;} public int Green { get设置;} public int Blue { get设置;} public Factroy f { get设置;} public IColor Clone(){ serializable helper s=new serializable helper();字符串目标=s.Serializable(此);返回s . DerializableIColor(目标);} }}序列化帮助类:

///摘要///序列化和反序列化辅助类////摘要公共类SerializableHelper(公共字符串可序列化(对象目标){使用(内存流=新的内存流()){新的二进制格式化程序().序列化(流、目标);返回转换.ToBase64String(流. to array());} }公共对象可派生(字符串目标){ byte[] targetArray=Convert .FromBase64String(目标);使用(内存流=新内存流(目标数组)){返回新的BinaryFormatter().反序列化(流);} } public T DerializableT(字符串目标){ return (T)可派生(目标);} }测试:

静态void Main(string[]args){ IColor color=new RedColor();颜色。红色=255;Color.f=new Factroy() {name='湖北工厂' };控制台。WriteLine(' color-factroy : ' color . f . name);//湖北工厂IColor color1=color。clone();颜色1。红色=234;Color1.f.name='北京工厂';控制台。WriteLine(' color 1-Factroy : ' color 1 . f . name);//北京工厂console . writeline(' color-factroy : ' color . f . name);//湖北工厂控制台。read();}程序运行结果如下:

结论:通过序列化和反序列化形成了一个新的对象。事实上,只要使用原型模式来复制项目中的对象,深度复制就可以通过序列化来完成。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:网原型模式讲解是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。