(Protype Pattern)原型模式
- 定义:
原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象
- 适用性:
当我们系统中有一些类,在使用的时候都有同样需要大量的创建,而这样的创建是复杂的而且是浪费CPU,内存资源的,为了解决这一问题,就出现了原型模式(深度克隆,浅克隆)
- 模式思想:
1. 通过使用同一的创建对象方案,尽量避免创建对象复杂过程代码重复出现;
2. 为了节省CPU,内存资源,我们可以让不同的类之间共享一些(业务上允许)资源,从而达到缩小占用内存空间;
3. 这样的一类业务需求本来就具有一定的同一性,我们抽象出一个同一的抽象类(Protype,ICloneable)作为规范,让有这样需求的类实现他们,从而达到了结构同一。
- 模式图:
- 模式示例:
原型抽象类:
public interface ICloneable<T>
{
T Clone();
}
具有原型属性类:
public class Member:ICloneable<Member>
{
public int ID{get;set;} public string Name{get;set;} public Member Clone()
{
Member member=new Member(){
ID=this.ID,
Name=this.Name
};
return member;
}
}
public class Product:ICloneable< Product >
{
public int ID{get;set;} public string Name{get;set;} public Member Owner{get;set;} public Product Clone()
{
Product product=new Product (){
ID=this.ID,
Name=this.Name,
Owner=this.Owner // 当前创建者,应该均为一个创建者,所以这里就可以共享Owner,从而节省了内存空间。
};
return product;
}
}
- 特点:
Protype抽象类特点: | 就有一个抽象接口Clone,返回值T(object,尽量使用泛型,避免加压包) |
具有原型属性的一些类特点: |
都实现了Protype抽象类,都有自己制定规则的Clone方法,内部都采用了符合业务需求的克隆方案(深度克隆还是采用浅克隆,要依据业务来定)。 |
当然.NET系统中叶提供了类似的接口类ICloneable,并提供了MemberwiseClone()浅克隆方法。
深克隆方案也有:反序列化、反射、new等。
(Protype Pattern)原型模式的更多相关文章
- Constructor Prototype Pattern 原型模式(PHP示例)
当一个类大部分都是相同的只有部分是不同的时候,如果需要大量这个类的对象,每次都重复实例化那些相同的部分是开销很大的,而如果clone之前建立对象的那些相同的部分,就可以节约开销. 针对php的一种实现 ...
- Prototype Pattern 原型模式
7.6 原型模式总结 原型模式作为一种快速创建大量相同或相似对象的方式,在软件开发中应用较为广泛,很多软件提供的复制(Ctrl + C)和粘贴(Ctrl + V)操作就是原型模式的典型应用,下面对该模 ...
- 设计模式(六)Prototype Pattern 原型模式
通过new产生一个对象非常繁琐,可以使用原型模式 原型模式实现: ——Cloneable接口和clone方法 ——Prototype模式实现起来最困难的地方是实现内存的复制和操作,Java中提供了cl ...
- iOS 开发之 设计模式【一】原型模式 (Prototype pattern)
原型模式(Prototype pattern): 定义:使用原型实例指定创建对象的种类,并通过复制这个原型创建对象.也可以理解为模板,在创建新对象的时候,按照模板的方法来复制,避免重复造轮子. 简单来 ...
- 第5章 原型模式(Protype Pattern)
原文 第5章 原型模式(Protype Pattern) 定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 原型图: 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Pro ...
- 设计模式01 创建型模式 - 原型模式(Protype Pattern)
参考 1. 设计模式:原型模式 | 博客园 2. Java clone深拷贝.浅拷贝 | CSDN 3. Cloneable接口和Object的clone()方法 | 博客园 原型模式(Prototy ...
- Net设计模式实例之原型模式( Prototype Pattern)
一.原型模式简介(Brief Introduction) 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. Specify the kin ...
- 深入浅出设计模式——原型模式(Prototype Pattern)
模式动机在面向对象系统中,使用原型模式来复制一个对象自身,从而克隆出多个与原型对象一模一样的对象.在软件系统中,有些对象的创建过程较为复杂,而且有时候需要频繁创建,原型模式通过给出一个原型对象来指明所 ...
- 二十四种设计模式:原型模式(Prototype Pattern)
原型模式(Prototype Pattern) 介绍用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象.示例有一个Message实体类,现在要克隆它. MessageModel usin ...
随机推荐
- 如何在Sublime text中运行PHP文件
如何在Sublime text中运行PHP文件 2014-06-14 17:17 3709人阅读 评论(1) 收藏 举报 phpSublime Text 一.将PHP安装目录放如环境变量PATH 二. ...
- BAT批处理(二)
在前一篇中已对BAT批处理基础作了一些总结,但是对于BAT批处理还有很多的知识点没有讲解到,比如DOS中的特殊符号:IF.FOR的使用:变量:更多的DOS命令等等.本文在前一篇的基础上继续对BAT批处 ...
- SQL查询(二)
常用查询技巧 1.获取数据的前3(n)行 ; 2.SQL语句中if语句 在SQL语句中没有直接的if语句,但是有两个函数:DECODE和CASE,他们能够实现if语句的功能 2.1)decode -- ...
- Nginx模块fastcgi_cache的几个注意点
fastcgi响应http请求的结果中,响应头包括Expires、Cache-Control、Set-Cookie三个,都会可能不被cache. thinkphp3.0禁止session自动启动 co ...
- javaWeb中servlet开发——监听器
监听的定义 对application的监听 application是servletContext接口的对象,表示的是整个上下文环境,如果要想实现对application监听则可以使用如下两个接口: s ...
- Why Stored Procedures?
http://www.w3resource.com/mysql/mysql-procedure.php Stored procedures are fast. MySQL server takes s ...
- sql server 数据库连接配置在外面 如何读取
注意:web运行读取要把配置文件放在WEB-INF下面 Driver=com.microsoft.sqlserver.jdbc.SQLServerDriverurl=jdbc:sqlserver:// ...
- 【转】四元数(Quaternion)和旋转
四元数介绍 旋转,应该是三种坐标变换--缩放.旋转和平移,中最复杂的一种了.大家应该都听过,有一种旋转的表示方法叫四元数.按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法--矩阵旋转和欧拉旋转. ...
- 【No.3 Ionic】超级逗表情 App
本人使用Ionic框架开发了一个 超级逗表情 的App 依赖插件 cordova-plugin-app-version 0.1.9 "AppVersion" cordova-plu ...
- 答CsdnBlogger问-关于VR取代安卓的问题
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 安卓未来的发展和命运几何? 现在VR和AR各种火爆,是否安卓能够在洪流中屹立不倒呢? 你好,其实这个 ...