设计模式-工厂三姐妹

来源:互联网 发布:智慧树网络选修课程 编辑:程序博客网 时间:2024/04/29 22:59
名字:简单工厂模式(创建型模式、静态工厂方法,不属于23 GOF设计模式)
定义:由一个工厂类根据传入的参数,动态决定应该创建出哪一种产品类的实例,被创建的实例通常都有共同的父类

类图:代码无措就是优(小菜面试——计算器)

工厂角色(核心)、抽象产品角色、具体产品角色、

优点:明确各自职责权利,利于整个软件体系结构优化

缺点:违反了高内聚、开闭原则
何时用:创建的对象较少、客户只知道传入工厂类的参数,对于如何创建不关心。例如:一个水果农场,当用户需要某一种水果时,该农场能够根据用户所提供的的水果名称返回该水果。在此,水果农场被称为工厂而生产出的水果称为产品。水果的名称则被称为参数,工厂可以根据参数的不同返回不同的产品,这是简单工厂模式的动机。

用户无需知道苹果等如何创建,只需要知道水果的名称即可得到对应的水果。


名字:工厂方法模式(创建型)
定义:定义一个用来创建对象的接口,让子类决定实例化哪一个雷。工厂方法使一个类的实例化延迟到其子类。
类图:雷锋依然在人间 抽象产品、具体产品、抽象工厂、具体工厂
优点:1、用户只需关心产品对于工厂,无须知道具体产品类的类名。
      2、所有具体工厂类具有同一抽象父类。
      3、完全符合开闭原则。
缺点:增加系统复杂度、抽象性和理解难度。
何时用:客户端不知道它所需要的对象的类、抽象工厂类通过其子类来制定创建哪个对象。


名字:抽象工厂模式
定义:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。
类图:就不能不换DB吗? 抽象工厂、具体工厂、抽象产品、具体产品
优点:1、隔离了具体类的生成,使得客户端并不需要知道什么被创建。
      2、当一个产品族中的多个点对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族的对象。
缺点:1、添加新的产品等级结构麻烦,违背开闭原则
何时用:1、一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节。

        2、系统中有多于一个的产品族,但每次只使用其中某一产品族 

        3、属于同一个产品族的产品将在一起使用,这一约束必须在系统的设计中体现出来

        4、产品等级结构稳定,在设计完成后,不会向系统中增加新的产品等级结构或者删除已有的产品等级结构。


区别:

1、简单工厂模式和工厂方法模式:

简单工厂模式设计的按钮工厂

工厂方法模式设计的按钮工厂


如果生产颜色相同的矩形、菱形、椭圆形、三角形按钮,而所生产的产品又位于不同的产品等级结构中,例如说有两个,如果使用工厂方法模式,就需要2*4个,如果使用抽象工厂模式,只需要两个。


0 0