成都战略咨询公司-5种创建型设计模式区别分析模式一:AbstractFactory模式(抽象工厂) 意 图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类 适用性:•一个系统要独立于它的产品的创建组合和表示时 •一个系统要由多个产品系列中的一个来配置时 •当你要强调一系列相关的产品对象的设计以便进行联合 使用时 •当你提供一个产品类库,而只想显示它们的接口而不是 实现时 参与者:•AbstractFactory(WidgetFactory) 声明一个创建抽象产品对 象的操作接口。
•ConcreteFactory(MotifWidgetFactory,PMWidgetFactory) 实现创建具体产品对象的操作 •AbstractProduct(Windows,ScrollBar) 为一类产品对象声 明一个接口 •ConcreteProduct(MotifWindow,MotifScrollBar) 定义一个 将被相应的具体工厂创建的产品对象实现 AbstractProduct接口。
•Client 仅使用由AbstractFactory和AbstractProduct类声明 的接口 效 果:AbstractFactory模式有下面的一些优点和缺点: 1)它分离了具体的类AbstractFactory模式帮助你控制一 个应用创建的对象的类 2)它使得易于交换产品系列一个具体工厂类在一个应用 中仅出现一次—即在它初始化的时候 3)它有利于产品的一致性当一个系列中的产品对象被设 计成一起工作时,一个应用一次只能使用同一个系列中的 对象,这一点很重要。
4)难以支持新种类的产品难以扩展抽象工厂以生产新种 类的产品 相关性:AbstractFactory类通常用FactoryMethod实现,但它们也 可以用Prototype实现 一个具体的工厂通常是一个单件Singleton模式二:Builder模式(生成器) 意 图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示一次就可以创建所有的复杂对象,而其他模式一次就只能创建一个对象。
适用性:•当创建复杂对象的算法应该独立于该对象的组成部分以 及它们的装配方式时 •当构造过程必须允许被构造的对象有不同的表示时 参与者:•Builder(TextConverter) —为创建一个Product对象的各个部件指定抽象接口 •ConcreteBuilder(ASCIIConverterTeXConverter TextWidgetConverter) —实现Builder的接口以构造和装配该产品的各个部件。
—定义并明确它所创建的表示 —提供一个检索产品的接口 •Director(RTFReader) —构造一个使用Builder接口的对象 •Product(ASCIITextTeXTextTextWidget) —表示被构造的复杂对象ConcreteBuilder创建该产品 的内部表示并定义它的装配过程 —包含定义组成部件的类,包括将这些部件装配成最终 产品的接口 效 果:1)它使你可以改变一个产品的内部表示。
2)它将构造代码和表示代码分开 3)它使你可对构造过程进行更精细的控制相关性:AbstractFactory与Builder相似,因为它也可以创建复杂对象主要的区别是Builder模式着重于一步步构造一个复杂对象而AbstractFactory着重于多个系列的产品对象(简单的或是复杂的)Builder在最后的一步返回产品,而对于AbstractFactory来说,产品是立即返回的 Composite通常是用Builder生成的。
模式三:FactoryMethod模式(工厂方法) 意 图:定义一个用于创建对象的接口,让子类决定实例化哪一个类FactoryMethod使一个类的实例化延迟到其子类 适用性:•当一个类不知道它所必须创建的对象的类的时候 •当一个类希望由它的子类来指定它所创建的对象的时 候 •当类将创建对象的职责委托给多个帮助子类中的某一 个,并且你希望将哪一个帮助子类是代理者这一信息局 部化的时候 参与者:•Product(Document) —定义工厂方法所创建的对象的接口。
•ConcreteProduct(MyDocument) —实现Product接口 •Creator(Application) —声明工厂方法,该方法返回一个Product类型的对象 Creator也可以定义一个工厂方法的缺省实现,它返回一 个缺省的ConcreteProduct对象 —可以调用工厂方法以创建一个Product对象 •ConcreteCreator(MyApplication) —重定义工厂方法以返回一个ConcreteProduct实例。
效 果: 1)为子类提供挂钩(hook) 2)连接平行的类层次迄今为止相关性:AbstractFactory经常用工厂方法来实现AbstractFactory模式中动机一节的例子也对FactoryMethod进行了说明工厂方法通常在TemplateMethods中被调用在上面的文档例子中,NewDocument就是一个模板方法 Prototypes不需要创建Creator的子类但是,它们通常要求一个针对Product类的Initialize操作。
Creator使用Initialize来初始化对象而FactoryMethod不需要这样的操作模式四:Prototype模式(原型) 意 图:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 适用性:•当要实例化的类是在运行时刻指定时,例如,通过动态 装载或者 •为了避免创建一个与产品类层次平行的工厂类层次时 •当一个类的实例只能有几个不同状态组合中的一种时 建立相应数目的原型并克隆它们可能比每次用合适的状 态手工实例化该类更方便一些。
参与者:•Prototype(Graphic) —声明一个克隆自身的接口 •ConcretePrototype(StaffWholeNoteHalfNote) —实现一个克隆自身的操作 •Client(GraphicTool) —让一个原型克隆自身从而创建一个新的对象 效 果:Prototype有许多和AbstractFactory和Builder一样的效果:它对客户隐藏了具体的产品类,因此减少了客户知道的名字的数目。
此外,这些模式使客户无需改变即可使用与特定应用相关的类Prototype模式的优点:1)运行时刻增加和删除产品2)改变值以指定新对象3)改变结构以指定新对象4)减少子类的构造5)用类动态配置应用 Prototype的主要缺陷是每一个Prototype的子类都必须实现Clone操作,这可能很困难相关性:Prototype和AbstractFactory模式在某种方面是相互竞争的但是它们也可以一起使用。
AbstractFactory可以存储一个被克隆的原型的集合,并且返回产品对象 大量使用Composite和Decorator模式的设计通常也可从Prototype模式处获益模式五:Singleton模式(单件) 意 图:保证一个类仅有一个实例,并提供一个访问它的全局访问点 适用性:在下面的情况下可以使用Singleton模式 •当类只能有一个实例而且客户可以从一个众所周知的访 问点访问它时。
•当这个唯一实例应该是通过子类化可扩展的,并且客户应 该无需更改代码就能使用一个扩展的实例时 参与者:•Singleton —定义一个Instance操作,允许客户访问它的唯一实例 Instance是一个类操作(即Smalltalk中的一个类方法和 C++中的一个静态成员函数) —可能负责创建它自己的唯一实例 效 果:Singleton模式有许多优点:1) 对唯一实例的受控访问2) 缩小名空间。
3) 允许对操作和表示的精化4) 允许可变数目的实例5) 比类操作更灵活相关性:很多模式可以使用Singleton模式实现参见AbstractFactoryBuilder,和Prototype《新连锁新零售》之创新商业模式【主要内容】:①连锁企业如何结合互联网金融工具进行商业模式创新,提升供应链产业链升级②单店盈利的提升,标准化打造,督导体系,连锁六大系统建设③连锁招商资源盘点,招商策划,连锁扩张模式设计,招商运营等。
④连锁股权合伙,人才激励,股权激励,企业融资,企业估值,门店众筹等⑤如何快速实现规模收益,连锁体系规划建设,连锁企业爆品打造方法等。