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

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

1 定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节
2 实现方式:
通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。
3 使用情况:很多时候,创建对象的时候,只是在某些属性值上有区别,而大部分都很相似,该类的用户对于该类的对象是怎么创建的,对类的内部结构这些都不关心的情况,但是这样的对象的初始化相对来说比较复杂,      而且需要耗费较长的时间或资源,这种情况下,我们可以考虑使用Prototype模式。
4 原型模式 prototype-(浅度克隆):浅克隆是指克隆一个对象,而该对象的属性只是基本数据类型,只克隆出该对象!
eg:
1 package com.lovo.prototype.two; 2 public class Player implements Cloneable { 3  4     private int id; 5     private String name; 6     private String skill; 7  8     public int getId() { 9         return id;10     }11     public void setId(int id) {12         this.id = id;13     }14     public String getName() {15         return name;16     }17     public void setName(String name) {18         this.name = name;19     }20     public String getSkill() {21         return skill;22     }23     public void setSkill(String skill) {24         this.skill = skill;25     }26     27     28 @Override29     public String toString() {30         return "Player [id=" + id + ", name=" + name + ", skill=" + skill + "]";31     }32     33     /**34      * 浅克隆35      * @return36      * @throws CloneNotSupportedException37      */38     public Player qianClone() throws CloneNotSupportedException{39         return (Player) super.clone();40     }41     42     43     44     45 46 }

 

1 package com.lovo.prototype.two; 2  3 public class Test { 4  5     public static void main(String[] args) throws CloneNotSupportedException { 6         Player p=new Player(); 7         p.setId(1); 8         p.setName("小明"); 9         p.setSkill("灌篮");10         11         Player p2=p.qianClone();12         13         System.out.println(p);14         System.out.println("=============");15         System.out.println(p2);16         System.out.println(p==p2);//fasle17         18     }19 20 }

 

 
5 原型模式 prototype-(深度克隆):深度克隆是指克隆的目标里面还有引用类型,引用类型里还有引用类型,同时把引用类型克隆出来叫深度克隆!
 
1 package com.lovo.prototype.two; 2  3 import java.io.ByteArrayInputStream; 4 import java.io.ByteArrayOutputStream; 5 import java.io.IOException; 6 import java.io.ObjectInputStream; 7 import java.io.ObjectOutputStream; 8 import java.io.Serializable; 9 import java.util.List;10 11 12 13 public class Player implements Cloneable,Serializable {14     private static final long serialVersionUID = 1L;15     private int id;16     private String name;17     private String skill;18     private List
list;19 20 public List
getList() {21 return list;22 }23 public void setList(List
list) {24 this.list = list;25 }26 public int getId() {27 return id;28 }29 public void setId(int id) {30 this.id = id;31 }32 public String getName() {33 return name;34 }35 public void setName(String name) {36 this.name = name;37 }38 public String getSkill() {39 return skill;40 }41 public void setSkill(String skill) {42 this.skill = skill;43 }44 45 @Override46 public String toString() {47 return "Player [id=" + id + ", name=" + name + ", skill=" + skill48 + ", list=" + list + "]";49 }50 51 52 /**53 * 深克隆54 * @return55 * @throws IOException56 * @throws ClassNotFoundException57 */58 public Player deepClone() throws IOException, ClassNotFoundException{59 ByteArrayOutputStream bos=new ByteArrayOutputStream();60 ObjectOutputStream oos=new ObjectOutputStream(bos);61 oos.writeObject(this);62 63 ByteArrayInputStream bis=new ByteArrayInputStream(bos.toByteArray());64 ObjectInputStream ois=new ObjectInputStream(bis);65 Player p=(Player) ois.readObject();66 67 68 69 70 return p;71 72 }73 74 75 }

 

1 package com.lovo.prototype.two; 2  3 import java.io.IOException; 4 import java.util.ArrayList; 5 import java.util.List; 6  7 public class Test { 8  9     public static void main(String[] args) throws CloneNotSupportedException, ClassNotFoundException, IOException  {10         Player p=new Player();11         p.setId(1);12         p.setName("小明明");13         p.setSkill("灌篮");14         15         Player p2=p.deepClone();16         List
list=new ArrayList<>();17 list.add("跑步");18 list.add("射击");19 p2.setList(list);20 21 22 System.out.println(p);23 System.out.println("=============");24 System.out.println(p2);25 26 }27 28 }

 

 

转载地址:http://vuupl.baihongyu.com/

你可能感兴趣的文章
第二课 , 启动 ./start-all.sh
查看>>
windows 2012 nps配置
查看>>
linux下jboss的安装配置
查看>>
运维日志管理系统
查看>>
fragment 横竖屏 不重建
查看>>
Oracle数据库文件坏块损坏的恢复方法
查看>>
Watir-webdriver处理table
查看>>
我的友情链接
查看>>
更改管理GPO的域控制器
查看>>
docker 数据卷与容器卷
查看>>
用路由器限制局域网的带宽流量
查看>>
2011-11-27
查看>>
linux下挂载硬盘
查看>>
C 语言 和 C++语言的对比学习 二 数据类型
查看>>
设计模式----组合模式UML和实现代码
查看>>
定期删除各子文件下数据
查看>>
更换VC后DDC提示证书不可用
查看>>
日历表
查看>>
SpringMVC中实现的token,防表单重复提交
查看>>
受限列表 队列与栈
查看>>