原型模式
来源:互联网 发布:淘宝账号怎么注销掉 编辑:程序博客网 时间:2024/05/20 01:10
1类图
2原型模式是一个创建模式。该模式有个样板实例,用户从这个样板对象中复制出一个内部属性一致的对象。用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。
3应用场景
- 1.类的初始化需要消耗非常多的资源,这个资源包括数据,硬件资源等,通过原型拷贝避免这些消耗。
- 2.通过new产生一个对象需要消耗非常繁琐的数据准备或访问权限,这时可以使用原型模式。
- 3.一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑用原型模式拷贝多个对象供调用者使用,即保护性拷贝。
4浅拷贝(副本文档的字段引用原始文档的字段)
- 模型
public class WordDocument implements Cloneable { private String mText; private ArrayList<String> mImage = new ArrayList<>(); public WordDocument(){ System.out.println("---构造函数---"); } @Override protected WordDocument clone(){ // TODO Auto-generated method stub try { WordDocument wd = (WordDocument)super.clone(); wd.mText= this.mText; wd.mImage = this.mImage; return wd; } catch (CloneNotSupportedException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public String getmText() { return mText; } public void setmText(String mText) { this.mText = mText; } public ArrayList<String> getmImage() { return mImage; } public void addmImage(String mImage) { this.mImage.add(mImage); } public void showDocument(){ System.out.println("Word content start"); System.out.println("Text: " + mText); System.out.println("Images List: "); for (String string : mImage) { System.out.println("image name : " + string); } System.out.println("word content end"); System.out.println(); }}
- 测试
public class Client { public static void main(String[] args) { // TODO Auto-generated method stub WordDocument wd = new WordDocument(); wd.setmText("这是一篇文章!"); wd.addmImage("图片1"); wd.addmImage("图片2"); wd.addmImage("图片3"); wd.showDocument(); WordDocument wd2 = wd.clone(); wd2.showDocument(); wd2.setmText("修改"); wd2.addmImage("test"); wd2.showDocument(); wd.showDocument(); }}
5深拷贝(建议使用)在protected WordDocument clone()修改如下
protected WordDocument clone(){ // TODO Auto-generated method stub try { WordDocument wd = (WordDocument)super.clone(); wd.mText= this.mText; //wd.mImage = this.mImage; wd.mImage = (ArrayList<String>) this.mImage.clone(); return wd; } catch (CloneNotSupportedException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }
阅读全文
0 0
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型 模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 大致计划《2017-10》
- hibernate注解开发相关
- 最小二乘法(least square method)的直观认识
- TCP与UDP的完整区别
- Unity优化场景的一点记录
- 原型模式
- 【模线性方程 && 扩展欧几里德】POJ
- Spring框架中调用HanLP分词的方法
- VTK7.1.1+VS2013+QT5.6.1安装教程
- 源码安装PHP7和ApachePHP支持
- 2. 观察者模式
- NYOJ 46 sum of all integer numbers
- mysql数据库增删查改操作命令
- Spring 基于注解的配置(一)(@Conmponent ,@Repository,@Service,以及对访问资源的限定)