设计模式之我见--6 原型模式

原型模式用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。  

Prototype原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。

当有一个对象内部的构建细节非常复杂,而且我们还经常使用多个此类的实例对象,如果每次都需要充新去创建,那样也会很影响性能。

下面用一个例子介绍一下,我们需要制作份简历,每一份简历的构造过程都很相似,只是会有一些具体的地方需要修改(比如某一份简历是针对某一个公司的,一般不需要修改),这样我们就可以先创建一份简历,然后再使用这份简历复制出两份。这样省去了我们每次都创建简历实例的麻烦,也避免了我们犯错误,如果我们的简历有一个地方写错,我们如果使用土办法,创建三个实例,那么都得修改,如果我们使用原型模式,只需要把原型的错误修改了,其他的不用改变。

下面看一下代码:

package ResumeShallowCopy;

class Resume implements Cloneable{
	private String name;
	private String sex;
	private int age;	
	public Resume(String name)
	{
		this.name = name;
	}
	public void SetPersonalInfo(String sex,int age)
	{
		this.sex = sex;
		this.age = age;
	}
	
	public void Display()
	{
		System.out.println(name+" " + sex + " " + age);
	}
	
	public Object Clone()
	{
		try
		{
			return (Object)super.clone();
		}
		catch(Exception ex)  {
			return null;
		}
	}
}

package ResumeShallowCopy;

class Test {	
	public static void main(String[] args) {
		Resume a = new Resume("A");
		a.SetPersonalInfo("男", 30);//这里可以在构造函数中初始化
		
		Resume b = (Resume)a.Clone();
		Resume c = (Resume)a.Clone();
		c.SetPersonalInfo("男", 24);	//应该提供修改信息的方法
		a.Display();
		b.Display();
		c.Display();
	}

}

在这个例子中,只是提供了一种制作简历的方法,原型模式更加适用的如下的情况:

本来这里是一张类图图片,但是不着调为什么就是不能上传成功。图片内容是,有一个简历接口,有一个Clone方法,然后有一个普通简历类和一个视频简历类分别继承了这个接口。

这样我们可以创建不同的简历。

使用原型模式还应该注意一个问题,深复制和浅复制。如果我们在简历加上了一个工作经历,而这个工作经历使用另一个类的实例,这样如果浅复制的时候就会是同一个对象的引用,这样我们修改一个对象的工作经历时候,所有的对象的工作经历都会影响,这时候就应该使用深复制了。在使用原型模式一定要处理好这个问题,否则会产生意想不到的麻烦。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值