工厂,顾名思义,能够生产产品的一个地方。产品,在面向对象中,就是类的实例。所以,“工厂”就是一个能够产生其它类型的对象的类。工厂类设计模式主要有三种,即简单工厂模式,工厂模式,抽象工厂模式三种。本文主要介绍简单工厂模式。由于其简单,很多人都不会将其列为一种设计模式。
简单工厂模式是指专门定义一个工厂类来负责创建产品类的实例,被创建的产品通常都具有共同的父类。
该设计模式包含三个角色:
简单工厂(SimpleProductFactory)角色:工厂模式的核心,负责生产具体的产品。工厂类可以被外部用户即客户端调用,创建产品对象,从而实现外部用户即客户端和产品对象的解耦。
抽象产品(Product)角色:简单工厂模式所创建的具体产品对象的父类,负责描述所有产品对象的共有特征。
具体产品(Concrete Product)角色:是指具体的产品,是客户端调用工厂的目的就是获取产品对象,在工厂模式中通常拥有多个具体产品。一般来讲是抽象产品类的子类,实现了抽象产品类中定义的所有接口方法。
可以通过一个例子更好的理解上述内容:
我们有一个水果基类Fruit(抽象产品角色),包涵produce方法 。有两个子类Apple和Banana(具体产品角色),重写produce方法。还有一个工厂类。工厂类(简单工厂角色)有fruitProduce的方法,输入参数为水果的名称。
客户端使用工厂类,通过调用fruitProduce方法来生产水果。
Python代码如下:
有了水果工厂,外部用户即客户端就可以使用水果工厂生成水果了:
那么,简单工厂模式的应用场景呢?对象的创建比较复杂的时候,就可以考虑使用简单工厂模式来实现。
简单工厂模式优点:客户端与工厂进行交互,不再负责生产具体的产品对象,从而实现了解耦合。(单一职责,实现了解耦合)。
简单工厂模式缺点:由于这个工厂类负责全部的具体产品的创建,那么具体产品类特别多时,我们就需要去修改工厂的代码,从而增大了维护难度,这样就违反了设计模式经典的开闭原则。
如何克服这个缺点呢?敬请期待设计模式之工厂模式。
(完)
看完本文有收获?请转发分享给更多人
关注「Python那些事」,做全栈开发工程师
领取专属 10元无门槛券
私享最新 技术干货