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

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

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

原型模式允许一个对象再创建另外一个可定制的对象,无需知道任何创建的细节。

工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝原型自己来实现创建过程。

eg:

当然上面这个关联关系有时候也可能是其他关系,具体情况需要变化

abstract class Prototype    {        private string id;        // Constructor         public Prototype(string id)        {            this.id = id;        }        // Property         public string Id        {            get { return id; }        }        public abstract Prototype Clone();  //主要是这个函数    }
class ConcretePrototype1 : Prototype    {        // Constructor         public ConcretePrototype1(string id) : base(id)        {        }        public override Prototype Clone()        {            // Shallow copy             return (Prototype) new ConcretePrototype1(this.Id);                }    }
static void Main(string[] args)        {            Prototype p1, c1;            p1 = new ConcretePrototype1(“Design Pattern");            c1 = p1.Clone();            Console.WriteLine("Cloned: {0}", c1.Id);            Console.Read();        }
模式解析:

对于.Net而言,原型抽象类Prototype是用不着的,因为克隆实在太常用了,所以.Net在System命名空间中提供了Icloneable接口,其中就是一个唯一的方法Clone(),这样,只用实现这个接口就可以完成原型模式了

另一方面,所有的Java类都继承自java.lang.Object,而Object类提供一个clone()方法,可以将一个Java对象复制一份。但是,这个Java类必须实现一个标识接口Cloneable,标识这个Java类支持复制。

然后注意深克隆与浅克隆的关系:

深克隆与浅克隆

在浅克隆中,被复制对象的所有变量都具有与原来的对象相同的值,而所有对其它对象的引用仍然指向原来的对象。换言之,浅克隆仅仅复制所考虑的对象,而不复制它所引用的对象,也就是说其中的成员对象并不复制。在浅克隆中,当对象被复制时它所包含的成员对象却没有被复制。
在深克隆中,对象在复制的同时其成员对象也将复制。(当对象里面还含有其他对象时,自己重新写clone函数的时候就要注意,要把对象复制手写一遍,系统并不能完成这个功能)

转载于:https://www.cnblogs.com/smallJunJun/p/9373771.html

你可能感兴趣的文章
VC6.0调试技巧(一)(转)
查看>>
php match_model的简单使用
查看>>
SIP服务器性能测试工具SIPp使用指导(转)
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>
STM32单片机使用注意事项
查看>>
js window.open 参数设置
查看>>
032. asp.netWeb用户控件之一初识用户控件并为其自定义属性
查看>>
移动开发平台-应用之星app制作教程
查看>>
leetcode 459. 重复的子字符串(Repeated Substring Pattern)
查看>>
springboot No Identifier specified for entity的解决办法
查看>>
浅谈 unix, linux, ios, android 区别和联系
查看>>
51nod 1428 活动安排问题 (贪心+优先队列)
查看>>
Solaris11修改主机名
查看>>
latex for wordpress(一)
查看>>
如何在maven工程中加载oracle驱动
查看>>
Flask 系列之 SQLAlchemy
查看>>
aboutMe
查看>>
【Debug】IAR在线调试时报错,Warning: Stack pointer is setup to incorrect alignmentStack,芯片使用STM32F103ZET6...
查看>>
一句话说清分布式锁,进程锁,线程锁
查看>>
FastDFS使用
查看>>