`
samsongbest
  • 浏览: 170246 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

4 原始模型(Prototype)模式

 
阅读更多

1. 含义

通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象.

 

2.类图

简单形式


登记形式


3.类代码

    简单形式

/**
 * 抽象原型角色
 *
 */
public interface Prototype extends Cloneable {
	Object clone();
}


/**
 * 具体原型角色
 */
public class ConcretePrototype implements Prototype{
	public Object clone() {
		try{
			return (Prototype)super.clone();
		}catch(CloneNotSupportedException e){
			return null;
			
		}
	}
}


/**
 * 客户角色
 */
public class Client {
	private Prototype prototype;

	public void operation(Prototype example) {
		prototype = (Prototype) example.clone();
		S.s(example);
		S.s(prototype);
	}

	public static void main(String[] a) {
		Client c = new Client();
		c.operation(new ConcretePrototype());

	}
}

  登记形式

/**
 * 抽象原型角色
 *
 */
public interface Prototype extends Cloneable {
	Object clone();
}


/**
 * 具体原型角色
 */
public class ConcretePrototype implements Prototype {
	@SuppressWarnings("finally")
	public synchronized Object clone() {
		Prototype temp = null;

		try {
			temp = (Prototype) super.clone();
			return temp;
		} catch (CloneNotSupportedException e) {
			S.s("Clone failed.");

		} finally {
			return temp;
		}
	}
}


/**
 * 原型管理器角色
 */

public class PrototypeManager {
	private Vector objects = new Vector();

	public void add(Prototype p) {
		objects.add(p);
	}

	public Prototype get(int i) {
		return (Prototype) objects.get(i);
	}

	public int getSize() {
		return objects.size();
	}
}


/**
 * 客户角色
 */
public class Client {
	public PrototypeManager pm = new PrototypeManager();
	private Prototype prototype;

	public void registerPrototype() {
		prototype = new ConcretePrototype();
		Prototype copytype = (Prototype) prototype.clone();
		pm.add(copytype);
	}

	public static void main(String[] a) {
		Client c = new Client();
		c.registerPrototype();
		c.registerPrototype();
		S.s(c.pm.getSize());
	}
}
 

4. 深复制

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

/**
 * 具体原型角色
 */
public class ConcretePrototype implements Prototype, Serializable {
	public Object clone() {
		Prototype concretePrototype = null;
		try {
			concretePrototype = (Prototype)deepClone();
			return concretePrototype;
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			return concretePrototype;
		}
	}

	/**
	 * 通过在流里读来读去的方式来实现深复制
	 * 
	 * @return
	 * @throws IOException
	 * @throws ClassNotFoundException
	 */
	public Object deepClone() throws IOException, ClassNotFoundException {
		// 将对象写到流里
		ByteArrayOutputStream bo = new ByteArrayOutputStream();
		ObjectOutputStream oo = new ObjectOutputStream(bo);
		oo.writeObject(this);
		// 从流里读回来
		ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());
		ObjectInputStream oi = new ObjectInputStream(bi);
		return oi.readObject();
	}
}
 

z

  • 大小: 69.2 KB
  • 大小: 82.8 KB
分享到:
评论

相关推荐

    Java与模式.清晰.rar

    Java与模式.清晰.rar 第一部分 第1章 模式的简史和形而上学 第2章 统一建模语言UML简介 ...第20章 原始模型(Prototype)模式 第21章 专题:JavaBean的“冷藏”和“解冻” 第四部分 第22章 适配器(Adapter)模式[1]

    关于-23种设计模式的有趣见解.doc

    4. **原始模型模式(Prototype模式)**: 原始模型模式通过克隆一个已有对象来创建新对象,避免重复编写相同代码。比如,收集一些肉麻情话,需要时直接复制使用。这种模式适用于需要频繁创建相似对象的情况,但每个...

    Java中23种设计模式详解

    17. 原始模型模式(Prototype) 原始模型模式用原型实例指定创建对象的种类,并且通过拷贝这个原型创建新的对象。这种模式使得对象创建可以灵活地变化。 18. 代理模式(Proxy) 代理模式为其他对象提供一个代理以...

    OO中对于23种设计模式的整理

    4. 原始模型模式(Prototype Pattern) 原始模型模式通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类,产品类不...

    23种JAVA设计模式和15种J2EE设计模式

    Prototype 原始模型模式 原始模型模式是一种基于已存在的实例创建新实例的方式,通过复制一个现有实例来生成新的实例,而无需知道其具体实现细节。例如,在即时通讯软件中,可以通过复制预先设置好的情话模板,...

    设计模式

    4. 原始模型模式(Prototype): 原始模型模式是通过克隆已有对象来创建新对象的设计模式。它提供了一种通过复制现有的对象来创建新对象的方式,减少了创建新对象的复杂度,尤其适用于对象创建成本较高的情况。原始...

    Java的23种设计模式.pdf

    4. 原始模型模式(Prototype模式):原始模型模式允许通过复制原型对象来创建新对象,提供了动态地增加或减少产品类的能力,且无需关心产品的具体实现细节。 5. 单例模式:单例模式保证一个类只有一个实例,并提供...

    java23种设计模式

    4. 原始模型模式(Prototype模式):该模式通过复制原型对象来创建新对象,允许动态地增加或减少产品类,适用于没有预定义等级结构的产品类集合。 5. 单例模式:单例模式确保一个类只有一个实例,并提供全局访问点...

    源码:阎宏设计模式光盘

    com.javapatterns.prototype 原始模型模式 com.javapatterns.proxy 代理模式 com.javapatterns.proxy.smartproxy 专题:智能引用代理 com.javapatterns.proxy.imageloader 专题:虚拟代理的例子 ...

    JAVA常用设计模式详解大全.doc

    4. 原始模型模式(Prototype Pattern): 原型模式也属于创建型设计模式,它通过复制现有对象来创建新对象,而不是通过实例化新的类。这种方法可以提高性能,特别是在创建对象非常耗时或者需要大量初始化工作时。 ...

    关于-设计模式的经典文章.doc

    4. 原始模型模式(Prototype): 原始模型模式通过克隆已有对象来创建新对象,简化了对象的创建过程。客户端可以要求一个原型对象克隆自身,以得到与原型相同或相似的新对象,而无需知道具体实现细节。 5. 单例...

    JAVA设计模式与J2EE设计模式.doc

    - **原始模型模式(Prototype模式)**:原型模式通过复制已有对象来创建新对象,避免了直接构造新对象的复杂性。比如,收集一些情话并复制到聊天软件中,就可以快速发送给不同的对象。 - **单例模式**:单例模式...

    C#23种设计模式_示例源代码及PDF

    原始模型模式: 原始模型模式 通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原 型对象的方法创建出更多同类型的对象。 原始模型模式允许动态的增加或减少产品类, 产品 类不需要非得有任何事先...

    设计模式(形象比喻快速入门).doc

    4. 原始模型模式(Prototype):原型模式是另一种创建型模式,它通过克隆现有的对象来创建新的对象。这种方法减少了创建新对象的开销,特别是当对象创建过程复杂时。原型模式允许动态地增加或减少产品类,对产品类的...

    23种JAVA设计模式和15种J2EE设计模式.docx

    1.1.4. Prototype—原始模型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。例如,我搜集了好多肉麻的情话,可以用来和MM聊天。 1.1.5. Singleton—...

    JAVA与模式

    <br>第一部份、UML和模式介绍 com.javapatterns.uml 统一建模语言UML介绍... com.javapatterns.prototype 原始模型模式 com.javapatterns.serializable 专题:JavaBean的“冷藏”和“解冻”

    经典:从追MM谈Java的23种设计模式

    4. 原始模型模式(Prototype):原型模式通过复制已有对象创建新对象,减少了创建新对象的成本。如例子中,将肉麻情话保存为原型,需要时直接复制到聊天工具中。 5. 单例模式(Singleton):单例模式确保一个类只有...

    java设计模式

    4. 原始模型模式(Prototype模式):允许通过复制已有对象来创建新对象,而无需知道对象的创建细节。这种方式在需要动态增加或减少产品类时特别有用,且无需关心产品的等级结构。 5. 单例模式:保证一个类只有一个...

    JAVA常用设计模式详解大全

    - 原始模型模式(Prototype):通过复制已有对象来创建新对象,避免了重复的初始化过程。 - 单例模式:保证一个类只有一个实例,并提供全局访问点,通常用于管理共享资源或全局配置。 2. 结构模式:关注如何组织...

    java原型模型

    Java原型模型(Prototype)是设计模式中的一种,主要用于对象的克隆操作,它允许我们创建对象的副本,而无需知道具体实现的细节。这个模式基于Java语言中的`Cloneable`接口和`clone()`方法,使得我们可以高效地复制...

Global site tag (gtag.js) - Google Analytics