设计模式之原型模式的学习思考
来源:互联网 发布:安康市 软件正版 编辑:程序博客网 时间:2024/06/05 19:12
原型模式是设计模式里的创建型模式,通过对象来创建对象,一般通过克隆来实现。
克隆有浅克隆和深克隆之分:是对类内部对象引用的克隆程度
- 浅克隆后,新对象类的基本数值独立,但是克隆的对象引用只是地址,原对象改变,新克隆的对象也会改变;
- 深克隆,完全克隆,源对象的改变无论是基本数值还是对象引用都不会对新对象造成影响。
小例子:
- 浅拷贝:
import java.util.ArrayList;import java.util.List;class People implements Cloneable{ private String name; private int age; private List<String> re; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public List<String> getRe() { return re; } public void setRe(List<String> re) { this.re = re; } public People clone(){ try { return (People)super.clone(); } catch (CloneNotSupportedException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } }}public class PrototypePattern { public static void main(String[] args) { People p1=new People(); p1.setName("ds"); p1.setAge(7); List<String> ll=new ArrayList<String>(); ll.add("呵呵"); p1.setRe(ll); People p2=p1.clone(); System.out.println(p1.getName()); System.out.println(p1.getRe()); System.out.println(p2.getName()); System.out.println(p2.getRe()); p1.setName("dsds"); ll.add("呵呵呵呵"); System.out.println(p2.getName()); // p2基本数据没有改变 System.out.println(p2.getRe()); // p2内部对象引用改变 }}
输出:
ds[呵呵]ds[呵呵]ds[呵呵, 呵呵呵呵]
- 深拷贝:
import java.util.ArrayList;import java.util.List;class People implements Cloneable{ private String name; private int age; private List<String> re; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public List<String> getRe() { return re; } public void setRe(List<String> re) { this.re = re; } public People clone(){ try { People person=(People)super.clone(); List<String> newre=new ArrayList<String>(); for(String r:newre){ newre.add(r); } person.setRe(newre); return person; } catch (CloneNotSupportedException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } }}public class PrototypePattern { public static void main(String[] args) { People p1=new People(); List<String> ll=new ArrayList<String>(); ll.add("哦哦"); p1.setRe(ll); People p2=p1.clone(); System.out.println(p1.getRe()); System.out.println(p2.getRe()); }}
输出:
[哦哦][]
阅读全文
1 0
- 设计模式之原型模式的学习思考
- 设计模式--对原型模式的思考
- 设计模式 原型模式与C++ & 设计模式的思考
- 设计模式学习笔记之原型模式
- 设计模式之原型模式学习
- 设计模式学习笔记之原型模式
- 设计模式学习之总结-原型模式
- 设计模式学习之原型模式
- 设计模式学习之路-原型模式
- 设计模式学习系列之原型模式
- 设计模式与泡mm的关系之Prototype原型模式及原型模式的再思考
- 原型模式带来的学习方式思考
- 设计模式之单例模式的学习思考
- 设计模式之创建者模式的学习思考
- 设计模式之适配器模式的学习思考
- 设计模式之桥接模式的学习思考
- 设计模式之过滤器模式的学习思考
- 设计模式之组合模式的学习思考
- 站点seo优化的过程中尽量少出现一些低级错误
- 组合数学学习
- Wireless Network
- 计算机图形学(四)几何变换_5_三维空间的几何变换
- R极简教程-3:R及RStudio的安装
- 设计模式之原型模式的学习思考
- STL allocator 类探究
- _itoa_s出错的问题
- JavaMail实现邮箱验证码
- openstack 常见问题及解决方法
- 字符串相关工具类
- Ubuntu16.04安装后要做的一些事情
- 2、STM32基本接口驱动--IO 单总线 串口 SPI IIC
- 【HTML5入门】Jquery中获取控件值的三种方法