简单工厂模式的回顾:
简单工厂模式是指专门定义一个工厂类来负责创建产品类的实例,被创建的产品通常都具有共同的父类。
包含三个角色:
简单工厂(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()
当有新的产品产生时,只要按照抽象产品角色、抽象工厂角色来生成对应的具体的产品和具体的工厂,那么就可以被客户端使用,而不必去修改任何已有的代码。可以看出工厂角色的结构设计是符合开闭原则
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/9231.html