6.Prototype-原型模式
来源:互联网 发布:mac开机进入客人用户 编辑:程序博客网 时间:2024/06/04 23:28
Prototype 原型模式
原型模式:
原型模式是创建型模式的一种,其特点在于通过「复制」一个已经存在的实例来返回
新的实例,而不是新建实例。被复制的实例就是我们所称的「原型」,这个原型是可
定制的。
原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在
的实例使程序运行更高效;或者创建值相等,只是命名不一样的同类数据。示例类图:
示例代码:
// Prototype Classpublic class Cookie implements Cloneable, Serializable { private static final long serialVersionUID = 1L; protected String type = "饼干"; protected Date createTime = new Date(); public void setCreateTime(Date createTime) { this.createTime = createTime; } @Override public String toString() { return "[type=" + type + "createTime=" + createTime.getTime() + "] " + hashCode(); } // 浅复制 @Override public Cookie clone() { try { return (Cookie) super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return null; } // 深复制 public Cookie deepClone() { try { // 写入当前对象的二进制流 ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(this); // 读出二进制流产生的新对象 ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bis); return (Cookie) ois.readObject(); } catch (Exception e) { e.printStackTrace(); } return null; }}// ConcretePrototypepublic class SweetCookie extends Cookie { private static final long serialVersionUID = 1L; public SweetCookie() { this.type = "小甜饼"; }}// Clientpublic class CookieMachine { private Cookie cookie;// cookie必须是可复制的 public CookieMachine(Cookie cookie) { this.cookie = cookie; } public Cookie makeCookie() { // return cookie.clone(); return cookie.deepClone(); } public static void main(String args[]) { List<Cookie> cookies = new LinkedList<Cookie>(); Cookie prototype = new SweetCookie(); CookieMachine cm = new CookieMachine(prototype); // 设置原型 for (int i = 0; i < 5; i++) { sleep(); Cookie cookieNew = cm.makeCookie(); cookieNew.setCreateTime(new Date());// 设置新时间 // 通过复制原型返回多个cookie cookies.add(cookieNew); } System.out.println(cookies); } static void sleep() { try { Thread.sleep(200); } catch (InterruptedException e) { } }}
- 浅复制:
将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。
深复制:
将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了
完全彻底的复制,而浅复制不彻底。
0 0
- 6.Prototype-原型模式
- 6.Prototype-原型模式
- 原型模式 Prototype模式
- 原型模式 Prototype模式
- 原型模式:prototype模式
- 原型模式 Prototype模式
- Prototype模式(原型模式)
- 原型模式:prototype模式
- 原型模式(Prototype)
- 原型模式(prototype)
- 原型(Prototype)模式
- 原型模式(Prototype Pattern)
- 原型(ProtoType)模式
- 原型模式(Prototype Pattern)
- 原型模式(Prototype Pattern)
- 原型模式 Prototype Pattern
- Prototype 原型模式
- 原型模式(Prototype)
- 2.FactoryMethod-工厂方法模式
- 【积累库】--Java 内部类(静态内部类)作用(198)
- 3.AbstractFactory-抽象工厂模式
- 4.Singleton-单例模式
- 5.Builder-建造者模式
- 6.Prototype-原型模式
- 7.Adapter-适配器模式
- 读取类所在目录路径
- 8.Decorator-装饰模式
- 9.Proxy-代理模式
- Mybits入门--配置文件使用
- 信息安全工程师 学习笔记(十三)
- 异步下载图片,动态设置cell高度
- PHP--笔试题