设计模式学习--原型模式

来源:互联网 发布:微医集团怎么样 知乎 编辑:程序博客网 时间:2024/04/30 19:43

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


原型模式其实就是从一个对象在创建另外一个可定制的对象,而且不需要知道任何创建的细节.

类初始化需要消耗非常多的资源,这个资源包括数据,硬件资源等,通过原型拷贝避免这些消耗;

通过new产生一个对象需要非常繁琐的数据准备或访问权限,这是可以使用原型模式;

一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象共调用者使用,即保护性拷贝.


创建对象时,没new一次,都需要执行一次构造函数,如果构造函数的执行时间很长,那么多次执行这个初始化操作就实在是太低效了,一般在初始化的信息不发现变化的情况下,克隆是最好的办法,这既隐藏可对象创建的细节,又对性能是大大的提高.


原型模式的核心问题就是对原型对象进行拷贝,在这个模式使用过程中需要注意的一点就是,深,浅拷贝的问题.

浅复制:被复制对象的所有变量都含有与原来对象相同的引用,而所有的其他对象的引用都仍然指向原来的对象.

深复制:吧引用对象的变量指向复制多的新对象,而不是原有的被引用的对象.


原型模式本质上就是对象拷贝,与C++中的拷贝构造函数有些类似,他们之间容易出现的问题也都是深拷贝,浅拷贝. 使用原型模式可以解决构建复杂对象的资源消耗问题,能够在某些场景下提升创建对象的效率,还有一个重要的用途即使保护性拷贝,也即使某个对象对外可能是只读的,为了防止外部对这个只读对象修改,通常可以通过返回一个对象拷贝的形式实现只读的限制.

优点:原型模式是在内存中二进制流的拷贝,要比直接new一个对象性能好很多,特别是要在一个循环体内产生大量的对象时,原型模式可以更好地体现其优点,

缺点: 这个即使优点也是缺点,直接在内存中拷贝,构造函数不会执行,在实际开发中应该注意这个潜在的问题.


0 0
原创粉丝点击