zoukankan      html  css  js  c++  java
  • 原型模式

    转载请注明出处!!!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;
             }
    }


    原型模式:

             我们一般说的原型,就是个0基础产品,依据它,我们改造了自己的产品。能够说原型是一个參照系。就想飞机模型一样。同理,我们有一个对象,这个对象是一个原型,希望依据它,得到一个新的对象,加工完好,得到一个成熟的产品。之所以要用原型,由于我们不希望做一些已经做了的事情。原型模式没有其它创建型模式一样复杂,它比較简单,原型类实现接口,重写方法,详细的子类继承原型类,然后子类怎么发展完好都能够。以下是原型模式的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能够使用序列化来实现。

     

  • 相关阅读:
    java bigdecimal (java double也时会失真)
    图像二维频谱的理解
    设计模式:装饰器模式实现 固定类功能
    c# winform 技术提升
    c# 多态的美丽(虚方法、抽象、接口实现)
    5天玩转C#并行和多线程编程
    [C#防止反编译].NET 产品版权保护方案 (.NET源码加密保护)
    用Ngen指令加快C#程序的启动速度
    cmd 批处理制作
    c#程序打包、机器代码生成(Ngen.exe)
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4025604.html
Copyright © 2011-2022 走看看