使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。

abstract  class NormalActor{  public abstract NormalActor Clone();}

abstract class FlyActor{ public abstract FlyActor Clone();}

abstract class WaterActor{ public abstract WaterActor Clone();}

class NormalActor1 exteds NormalActor

{

 public NormalActor Clone()

{

  new 简单值对象新创建 对象地址  深复制浅复制

   return (NormalActor)this;

}

}

class NormalActor2 exteds NormalActor

{

   Clone()

}

class NormalActor3 exteds NormalActor

{

 Clone()

}

 class FlyActor1 extends FlyActor

{

Clone()

}

 class FlyActor2 extends FlyActor

{

 Clone()

}

class WaterActor1 extends WaterActor

{

   Clone()

}

上边的类都实现了克隆方法,当来一个新类时水兵角色,就可以新建个类继承WaterActor,实现了扩展,然后修改run方法里的参数。

 

public class App

{

    public static void main()

    {

       GameSystem gs = new GameSystem();

       gs.run(new NormalActor1,new FlyActor2(),new WaterActor1());

    }

}

 

public class GameSystem

{

 public static void Run(NormalActor nana,FlyActor fafa,WaterActor wawa)

{

 NormalActor na = nana.clone();             //new NormalActor1();

  NormalActor na1 = nana.clone();            // new NormalActor2();

 NormalActor na2 = nana.clone();            // new NormalActor3();

FlyActor fa =  fafa.clone();           // new FlyActor1();

FlyActor fa1 =    fafa.clone();            //new FlyActor2();

WaterActor wa =    wawa.clone();            //new WaterActor1();

 

}

}

prototype模式的几个要点

prototype模式同样用于隔离类对象的使用者和具体类型(易变类)之间的耦合关系,他同样要求这些易变类拥有稳定的接口。

prototype模式对于如何创建易变类的实体对象采用原型克隆的方法来做,它使得我们可以非常灵活地动态创建拥有某些稳定接口的新对象--所需工作仅仅是注册一个新类的对象(即原型),然后在任何需要的地方不断地Clone。

prototype模式中的Clone方法可以利用。net中的object类的MemberwiseClone()方法或者序列化来实现深拷贝。

有关创建性模式的讨论

Singleton模式解决的是实体对象个数的问题。除了Singleton之外,其他创建型模式解决的都是New所带来的耦合关系。

FactoryMethod,Abstract Factory,Builder都需要一个额外的工厂类来负责实例化易变对象,而prototype则是通过原型(一个特殊的工厂类)来克隆易变对象。

如果遇到易变类,起初的设计通常从Factory Method开始,当遇到更多的复杂变化时,在考虑重构为其他三种工厂模式abstract Factory,Builder,prototype

posted on 2014-06-15 21:07  路过的二师兄  阅读(143)  评论(0)    收藏  举报