[设计模式]原型模式
2014-05-01 23:20
337 查看
定义:实现cloneable接口,不通过new一个对象出来,而是通过复制一个对象的模式叫做原型模式。
看下例子:
执行结果就是title不变,内容发生很大的变化。
仔细观察cloneable接口的实现clone(),进行对象对拷贝,该方法主要是对Mail进行一个clone。
这样做的好处优点在于:
1.性能优良,原型模式是在内存中直接进行二进制拷贝,要比直接new一个对象对速度快很多,特别是在大量的进行循环中
2.逃避构造函数的一些约束,它是直接内存拷贝,不用执行够着函数的。当然缺点就是减少了约束。
在使用中根据自己的一些情况合理的应用。
使用场景描述:
通常用于一个类有多个修改者的场景,并且初始化需要很多资源。
看下例子:
import java.util.Random; public class Main { public static void main(String[] args) { Mail mail = new Mail(); mail.setMailTitle("XXX"); for (int i = 0; i < 10; i++) { Mail cloneMail = mail.clone(); Random random= new Random(); cloneMail.sendMail(random.nextInt(15)+""); } } } class Mail implements Cloneable { private String title; public void setMailTitle(String title) { this.title = title; } public void sendMail(String content) { System.out.println(title + ":" + content); } @Override protected Mail clone() { Mail mail = null; try { mail = (Mail) super.clone(); } catch (Exception e) { e.printStackTrace(); } return mail; } }
执行结果就是title不变,内容发生很大的变化。
仔细观察cloneable接口的实现clone(),进行对象对拷贝,该方法主要是对Mail进行一个clone。
这样做的好处优点在于:
1.性能优良,原型模式是在内存中直接进行二进制拷贝,要比直接new一个对象对速度快很多,特别是在大量的进行循环中
2.逃避构造函数的一些约束,它是直接内存拷贝,不用执行够着函数的。当然缺点就是减少了约束。
在使用中根据自己的一些情况合理的应用。
使用场景描述:
通常用于一个类有多个修改者的场景,并且初始化需要很多资源。
相关文章推荐
- CTreeCtrl结点拖动实现(与后台联动)
- BZOJ3236 [Ahoi2013]作业
- ubuntu eclipse下配置C++ 环境
- Oracle11G 用exp导出用户
- Struts2实现文件上传报错(三)
- Windows 7 硬盘安装正确方法 不用刻盘
- Visaul Studio 常用快捷键的动画演示
- 很激动可以在CSDN写博
- Struts2实现文件上传报错(三)
- 14 0501
- php empty()和isset()的区别
- MVC文件图片ajax上传轻量级解决方案,使用客户端JSAjaxFileUploader插件02-多文件上传
- mac下lua环境搭建笔记
- Openstack部署工具
- 游戏Entity设计不完全整理(转)
- vc中改变对话框的背景色
- [Javascript]jquery $(document).ready() 与window.onload的区别
- 简单版猜拳游戏
- Java的JDBC事务详解
- hdu1175