设计模式之工厂模式

简单工厂模式的回顾:

  简单工厂模式是指专门定义一个工厂类来负责创建产品类的实例,被创建的产品通常都具有共同的父类

  

  包含三个角色:

  简单工厂(SimpleProductFactory)角色:工厂模式的核心,负责生产具体的产品。工厂类可以被外部用户即客户端调用,创建产品对象,从而实现外部用户即客户端和产品对象的解耦。

  抽象产品(Product)角色:简单工厂模式所创建的具体产品对象的父类,负责描述所有产品对象的共有特征。
  具体产品(Concrete Product)角色:是指具体的产品,是客户端调用工厂的目的就是获取产品对象,在工厂模式中通常拥有多个具体产品。一般来讲是抽象产品类的子类,实现了抽象产品类中定义的所有接口方法。

  简单工厂模式优点:客户端与工厂进行交互,不再负责生产具体的产品对象,从而实现了解耦合。(单一职责,实现了解耦合)。

  简单工厂模式缺点:由于这个工厂类负责全部的具体产品的创建,那么具体产品类特别多时,我们就需要去修改工厂的代码,从而增大了维护难度,这样就违反了设计模式经典的开闭原则

解决这个缺点的方案就是工厂模式。

 

 

工厂模式组成: 
1、抽象工厂角色(ProductFactory):是具体工厂角色必须继承的父类(Java中也可以通过实现接口来完成),这是工厂模式的核心。
2、具体工厂角色(ConcreteProductFactory):类似于简单工厂模式中的简单工厂角色,负责生产具体的产品对象。 
3、抽象产品角色(Product):与简单工厂模式中的抽象产品角色一样,它是具体产品继承的父类(Java中也可以实现接口)。

4、具体产品角色(ConcreteProduct):简单工厂模式中的抽象产品角色一样,是指具体的产品,是客户端调用工厂的目的就是获取产品对象,在工厂模式中通常拥有多个具体产品。一般来讲是抽象产品类的子类,实现了抽象产品类中定义的所有接口方法。

 

 

举个栗子:

class Foot:
    "食品父类"
    def produce(self):
        print("Foot is produced")

class Noodles (Foot):
    "面条子类"
    def produce(self):
        print("Noodles is produced")
class Rice(Foot):
    "米饭子类"
    def produce(self):
        print("Rice is produced")


class FootFactory:
    '''食品工厂'''
    def product(self):
        return Foot()
 
class NoodleFactory:
    '''面条工厂'''
    def product(self):
        return Noodles()

class RiceFactory:
    '''米饭工厂'''
    def product(self):
        return Rice()

if __name__ == '__main__':
    #根据不同的工厂生产不同的食物
    noodlefactory = AppleFactory()
    noodle= noodlefactory .product()
    noodle.produce()
     ricefactory = RiceFactory()
    rice= ricefactory .product()
    rice.produce()

当有新的产品产生时,只要按照抽象产品角色、抽象工厂角色来生成对应的具体的产品和具体的工厂,那么就可以被客户端使用,而不必去修改任何已有的代码。可以看出工厂角色的结构设计是符合开闭原则

 

posted @ 2018-02-24 09:45  左手十字  阅读(194)  评论(0编辑  收藏  举报