种设计模式汇总设计模式原型模式.docxVIP

  • 3
  • 0
  • 约8.42千字
  • 约 14页
  • 2021-03-10 发布于山东
  • 举报
种设计模式汇总设计模式-原 型模式 ———————————————————————————————— 作者: ———————————————————————————————— 日期: ? 设计模式 原型模式 概述 在软件系统中 , 有时候面临的产品类是动态变化的,而且这个产品类具有一定的等级结构。这时 如果用工厂模式, 则与产品类等级结构平行的工厂方法类也要随着这种变化而变化, 显然不大合 适。那么如何封装这种动态的变化?从而使依赖于这些易变对象的客户程序不随着产品类变化 ? 意图 用原型实例指定创建对象的种类 , 并且通过拷贝这些原型创建新的对象。 结构图 Pr oto ty pe 模式结构图 生活中的例子 Prot o t y pe 模式使用原型实例指定创建对象的种类。新产品的原型通常是先于全部产品建立 的,这样的原型是被动的,并不参与复制它自己。一个细胞的有丝分裂,产生两个同样的细胞 , 是一个扮演主动角色复制自己原型的例子 , 这演示了原型模式。 一个细胞分裂 , 产生两个同样基因 型的细胞。换句话说,细胞克隆了自己。 ? 使用细胞分裂例子的 Prot o ty p e 模式对象图 原型模式解说 我们考虑这样一个场景, 假定我们要开发一个调色板, 用户单击调色板上任一个方块, 将会返回一个对应的颜色的实例,下面我们看看如何通过原型模式来达到系统动态加载具体产品的目的。 很自然 , 我们利用O O的思想,把每一种颜色作为一个对象,并为他们抽象出一个公用的父类 , 如 下图: ? 实现代码: public  abst ract class  Col or { pu bli c abstract void Dis pla y(); } pu bli c c l ass Re dColor:Colo r { publ i c o verride void Display() { Con sole.Writ eLine( " Re ds RG B Valu es are: 255,0,0) ; } } publ ic cl ass GreenC olor:C olor { publ i c overr i de void Dis play () { Consol e.WriteLine( " Gr ee n' s RG B V a lues a re:0 ,255,0 ); } } 客户程序需要某一种颜色的时候 , 只需要创建对应的具体类的实例就可以了。 但是这样我们并没 有达到封装变化点的目的,也许你会说,可以使用工厂方法模式 , 为每一个具体子类定义一个与 其等级平行的工厂类 , 那么好,看一下实现 : ?实现代码: publ ic ab str ac t clas s Co lor Facto ry { pu blic abs t ract Colo r Crea t e (); } pub li c cl a ss RedFac tory:Co lo rFactory { publ ic over ride Co lor Crea te() { retur n new RedColor( ); } } ubl i c class Green Factor y: ColorFactory { ublic over ri de Color Creat e () { return new Gre e nColor() ; } } 实现了这一步之后, 可以看到, 客户程序只要调用工厂方法就可以了。 似乎我们用工厂方法模式 来解决是没有问题的。但是 , 我们考虑的仅仅是封装了 new 变化 , 而没有考虑颜色的数量是不断 变化的 , 甚至可能是在程序运行的过程中动态增加和减少的,那么用这种方法实现,随着颜色数 量的不断增加,子类的数量会迅速膨大,导致子类过多  , 显然用工厂方法模式有些不大合适。 进一步思考, 这些  C o lor  子类仅仅在初始化的颜色对象类别上有所不同。  添加一个  Colo rT ool 这样的类  , 来参数化的它的实例,而这些实例是由  Co l or  支持和创建的。我们让  Colo r Tool  通 过克隆或者拷贝一个  Col or子类的实例来创建新的  Col or,这个实例就是一个原型。如下图 所示 : ? 实现代码: abstra ct cla ss C olo rProt otyp e { public ab st ract Colo rPr oto type Cl on e(); } clas s ConcteteCo lorP rot oty pe : Col orProtot ype { r iva te int _ red

文档评论(0)

1亿VIP精品文档

相关文档