原型模式

来源:互联网 发布:淘宝账户更改手机号码 编辑:程序博客网 时间:2024/06/06 10:04

原型模式(克隆模式):1通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式

2 以某个对象为原型,复制新的对象。避免了重新执行构造过称步骤

3 克隆出的新对象不会改变原型对象,然后再修改克隆的值;new创建的对象属性采用的是默认值

实现:Cloneable接口和Clone()方法


浅克隆:复制之后,若s1的属性改变,则s2的属性也会改变

package prototype;import java.util.Date;public class Sheep implements Cloneable {private String name;private Date birthday;@Overrideprotected Object clone() throws CloneNotSupportedException {Object obj = super.clone(); // 直接调用Object对象的clone()方法;return obj;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public Sheep(String name, Date birthday) {super();this.name = name;this.birthday = birthday;}public Sheep() {}}

package prototype;import java.util.Date;//测试原型系统(浅克隆)public class Client {public static void main(String[] args) throws Exception {Date d = new Date(12312321331L);Sheep s1 = new Sheep("多利", d);System.out.println(s1);System.out.println(s1.getName());System.out.println(s1.getBirthday());d.setTime(2343243223L);System.out.println(s1.getBirthday());Sheep s2 = (Sheep) s1.clone();System.out.println(s2);System.out.println(s2.getName());System.out.println(s2.getBirthday());}}


深克隆(联同属性一起克隆):即使s1的属性改变,复制之后s2的属性不会变

package prototype;import java.util.Date;public class Sheep2 implements Cloneable {private String name;private Date birthday;@Overrideprotected 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 getName() {return name;}public void setName(String name) {this.name = name;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public Sheep2(String name, Date birthday) {super();this.name = name;this.birthday = birthday;}public Sheep2() {}}
package prototype;import java.util.Date;//原型模式(深复制)public class Client2 {public static void main(String[] args) throws Exception {Date d = new Date(12312321331L);Sheep2 s1 = new Sheep2("多利", d);Sheep2 s2 = (Sheep2) s1.clone();// 实现深复制。s2对象的birthday是一个新对象System.out.println(s1);System.out.println(s1.getName());System.out.println(s1.getBirthday());d.setTime(2343243223L);System.out.println(s1.getBirthday());System.out.println(s2);System.out.println(s2.getName());System.out.println(s2.getBirthday());}}








0 0
原创粉丝点击