设计模式之原型模式
来源:互联网 发布:网络语雪崩是什么意思 编辑:程序博客网 时间:2024/06/05 11:00
一 prototype
二 浅拷贝
obj对象的clone方法 继承Cloneable接口(空接口)是规范
public class Sheep implements Cloneable,Serializable { //1997,英国的克隆羊,多利! private String sname; private Date birthday; @Override protected Object clone() throws CloneNotSupportedException { Object obj = super.clone(); //直接调用object对象的clone()方法! return obj; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public Sheep(String sname, Date birthday) { super(); this.sname = sname; this.birthday = birthday; } public Sheep() { }}
其中克隆后的对象指向同一个Date地址,其中一个date改变另外一个随之改变
三 深拷贝
public class Sheep2 implements Cloneable { //1997,英国的克隆羊,多利! private String sname; private Date birthday; @Override protected Object clone() throws CloneNotSupportedException { Object obj = super.clone(); //直接调用object对象的clone()方法! //添加如下代码实现深复制(deep Clone) Sheep2 s = (Sheep2) obj; s.birthday = (Date) this.birthday.clone(); //把属性也进行克隆! return obj; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public Sheep2(String sname, Date birthday) { super(); this.sname = sname; this.birthday = birthday; } public Sheep2() { } }
四 利用序列化和反序列化进行深拷贝
public class Client3 { public static void main(String[] args) throws CloneNotSupportedException, Exception { Date date = new Date(12312321331L); Sheep s1 = new Sheep("少利",date); System.out.println(s1); System.out.println(s1.getSname()); System.out.println(s1.getBirthday());// 使用序列化和反序列化实现深复制 ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(s1); byte[] bytes = bos.toByteArray(); ByteArrayInputStream bis = new ByteArrayInputStream(bytes); ObjectInputStream ois = new ObjectInputStream(bis); Sheep s2 = (Sheep) ois.readObject(); //克隆好的对象! System.out.println("修改原型对象的属性值"); date.setTime(23432432423L); System.out.println(s1.getBirthday()); s2.setSname("多利"); System.out.println(s2); System.out.println(s2.getSname()); System.out.println(s2.getBirthday()); }}
将原型模式和工厂模式结合起来:
以上几篇设计模式为创建型模式
阅读全文
0 0
- 设计模式之原型
- 设计模式之原型
- 设计模式 之 原型
- 设计模式之原型
- 设计模式之原型
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之-原型模式
- 设计模式之 原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之--原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- CaoHaha's staff(中国大学生程序选拔赛2017年网络大赛)
- 傅立叶变换中的吉布斯(Gibbs)现象
- 朴素贝叶斯
- 【哈希查找】hashtable
- 前端开发必备软件/工具/学习网址
- 设计模式之原型模式
- 面试时遇到的一些题
- 层次遍历、递归:jump-game
- CCPC2017网络赛1005 CaoHaha's staff——找规律
- 安装Python 3.6 在Ubuntu 16.04 LTS 版本
- 2017.08.19【NOIP提高组】模拟赛B组总结
- ajax以get和post方式请求
- hbase的安装和启动
- css3放大显示div(由远及近显示)