原型模式

转载请注明出处!!!http://blog.csdn.net/zhonghuan1992

         所有配套代码均在github上:https://github.com/ZHONGHuanGit/DesignPattern

 



跟着ZHONGHuan学习设计模式

原型模式






         原型模式属于对象的创建模式,通过给出一个原型对象来指明要创建对象的类型,然后用复制这个原型对象的办法来创建出更多的同类型的对象。就是给你一个现有的对象,你要得到和这个对象同类型的新对象,就将这个对象复制一下,就可以得到了。

 

Java对象的复制:

         Java的所有类都是从java.lang.Object类继承而来的,而object类提供下面的方法对对象进行复制:protected Object clone()

         子类可以把这个方法置换掉,每个类的情况不同,置换后提供一个满足自己的clone方法。值得注意的是,对象复制有一个问题需要注意,通常一个对象内部有对其它对象的引用,就是其它对象是该对象的一个组成部分,当使用object类的clone方法复制对象的时候,此对象的其它对象引用同时也会被复制一份。

         Java提供的cloneable接口起了一个作用,就是告诉java虚拟机可以安全的在该类上使用clone方法。不过Object本身并没有实现cloneable接口,因此如果要复制的类没有实现cloneable接口,调用clone方法会抛出CloneNotSupportedException异常。

 

class Prototype implements Cloneable {//实现cloneable接口
         public Prototype clone(){ //根据自己的要求,置换了clone方法
                   Prototype prototype = null;
                   try{
                            prototype= (Prototype)super.clone();
                   }catch(CloneNotSupportedException e){
                            e.printStackTrace();
                   }
                   return prototype;
         }
}


 

原型模式:

         我们一般说的原型,就是个初级产品,根据它,我们改造了自己的产品。可以说原型是一个参照系。就想飞机模型一样。同理,我们有一个对象,这个对象是一个原型,希望根据它,得到一个新的对象,加工完善,得到一个成熟的产品。之所以要用原型,因为我们不希望做一些已经做了的事情。原型模式没有其他创建型模式一样复杂,它比较简单,原型类实现接口,重写方法,具体的子类继承原型类,然后子类怎么发展完善都可以。下面是原型模式的UML类图

 

UML类图

        

 

代码实现

interface Prototype extends Cloneable
{// 实现cloneable接口
	public Prototype clone();// 交给具体的原型子类去实现
}

class ConcretePrototype implements Prototype
{
	public Prototype clone()
	{// 子类实现自己的clone方法
		Prototype prototype = null;
		try
		{
			prototype = (Prototype) super.clone();
		} catch (CloneNotSupportedException e)
		{
			e.printStackTrace();
		}
		System.out.println("成功得到一个原型复制品");
		return prototype;
	}
}

class Client
{
	Prototype prototype = new ConcretePrototype();

	void getPrototype()
	{
		Prototype pt = prototype.clone();// 通过原型,得到一个新的原型
	}
}

public class Main
{
	public static void main(String[] args)
	{
		new Client().getPrototype();
	}
}



 

什么时候使用原型模式:

         当创建给定类的实例的过程很麻烦,很复杂,或者很消耗的代价太高的时候,我们需要使用原型模式。

         因为原型模式创建一个新对象,就想复制粘贴一样简单。

 

注意事项:

         1使用原型模式复制对象不会调用类的构造方法。因为对象的复制是通过调用Object类的clone方法来完成的,它直接在内存中复制数据,因此不会调用到类的构造方法,构造方法中的代码不会执行。

         2深复制和浅复制的问题。深复制就是对象内部的对象是否仍需复制,而不是简单的想浅复制那样把地址复制。深复制,java可以使用序列化来实现。

 

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值