JAVA设计模式之原型模式

来源:互联网 发布:编程类游戏 编辑:程序博客网 时间:2024/05/15 02:36

浅度克隆

package com.imust.prototype;import java.util.Date;/** * 克隆实现这个接口 * @author  Zachary (为上帝所心仪的人) * @date    2017年9月6日 * @project shejimoshi * @package com.imust.prototype */public class Sheep implements Cloneable{    private String sname;    private Date birthday;    @Override    protected Object clone() throws CloneNotSupportedException {        Object obj = super.clone();//直接调用Object的克隆方法        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() {        super();    }    public Sheep(String sname, Date birthday) {        super();        this.sname = sname;        this.birthday = birthday;    }}

测试1

package com.imust.prototype;import java.util.Date;/** * 测试原型模式(浅克隆) * @author  Zachary (为上帝所心仪的人) * @date    2017年9月6日 * @project shejimoshi * @package com.imust.prototype */public class Client {    public static void main(String[] args) throws Exception {        Date date = new Date();        date.setTime(2323232323L);        Sheep s1 = new Sheep("少利",date);        System.out.println(s1);        System.out.println(s1.getSname());        System.out.println(s1.getBirthday());        Sheep s2 = (Sheep) s1.clone();        System.out.println(s2);        System.out.println(s2.getSname());    }}

深度克隆

package com.imust.prototype;import java.util.Date;/** * 深度克隆 * @author  Zachary (为上帝所心仪的人) * @date    2017年9月6日 * @project shejimoshi * @package com.imust.prototype */public class Sheep2 implements Cloneable{    private String sname;    private Date birthday;    @Override    protected Object clone() throws CloneNotSupportedException {        Object obj = super.clone();//直接调用Object的克隆方法        //添加如下代码实现深复制(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() {        super();    }    public Sheep2(String sname, Date birthday) {        super();        this.sname = sname;        this.birthday = birthday;    }}

测试2

package com.imust.prototype;import java.util.Date;/** * 测试原型模式 * 测试深复制 * @author  Zachary (为上帝所心仪的人) * @date    2017年9月6日 * @project shejimoshi * @package com.imust.prototype */public class Client2 {    public static void main(String[] args) throws Exception {        Sheep2 s1 = new Sheep2("少利",new Date());        Sheep2 s2 = (Sheep2) s1.clone();        System.out.println(s1);        System.out.println(s1.getSname());        System.out.println(s1.getBirthday());        Date date = new Date();        date.setTime(23232323232L);        s1.setBirthday(date);        System.out.println(s1.getBirthday());        s2.setSname("多里");        System.out.println(s2);        System.out.println(s2.getSname());        System.out.println(s2.getBirthday());    }}

这里写图片描述

原创粉丝点击