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

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

    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

  • 相关阅读:
    ScheduledThreadPoolExecutor 使用线程池执行定时任务
    ocals是Express应用中 Application(app)对象和Response(res)
    Spring Test 整合 JUnit 4 使用总结
    javascript创建一个基于对象的栈结构
    亲密字符串之Javascript解法
    javascript创建一个基于数组的栈结构
    整数反转
    stage1----航空票务系统需求分析报告
    实验报告
    Lamda 表达式
  • 原文地址:https://www.cnblogs.com/hyp5490-/p/3789915.html
Copyright © 2011-2022 走看看