原型模式
来源:互联网 发布:淘宝账户更改手机号码 编辑:程序博客网 时间: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
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型 模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- Oracle 同一列的字符串值相加-列转行函数 Listagg()
- PopupWindow报错android.view.WindowManager$BadTokenException的问题解决
- BaseRecyclerViewAdapterHelper开源项目之BaseMultiItemQuickAdapter 实现多类型源码学习
- 工作总结27 Disconnected:No supported authentication methods available
- vim的使用
- 原型模式
- 人人都可以做深度学习应用:入门篇(下)
- APP_BASE_HREF: OpaqueToken
- 关于C# 中无闪烁圆形标记
- 动态大小的矩阵相乘模板
- K最近邻算法及其Python实现
- 平台无关
- mbedtls移植到k20简要笔记
- iOS FTP客户端的见解(续)