01-工厂模式
介绍 #
在工厂模式中,客户端可以请求一个对象,而无需知道这个对象来自哪里,也就是,使用那个类来生成这个对象,共仓背后的思想是简化对象的创建,与客户端自己基于类实例化直接创建对象相比,基于一个中心化函数来实现,更易于追踪创建了那些对象,通过将创建对象的代码和使用对象的代码解耦,工厂能够降低应用维护的复杂度。
工厂通常由两种方式,一种是工厂方法,它是一个方法,对不同的输入参数返回不同的对象,第二种是抽象工厂,它是一组用于创建一系列相关事务的工厂方法
1. 工厂方法 #
案例:Django框架工厂方法来创建表单字段,Django的forms模块支持不同类型的字段(CharField, EmailField)的创建和定制(max_length, required)。
何时使用 #
如果因为应用创建对象的代码分布在多个不同的地方,而不是仅在一个函数/方法中,你发现没法跟踪这些对象,那么因该考虑使用工厂方法模式
代码示例 https://github.com/lanms/Python_design_pattern/blob/master/01_factory_pattern/factory_method.py
2. 抽象工厂 #
抽象工厂设计模式是抽象方法的一种泛化
抽象工厂有一个有点,在使用工厂方法时从用户的视角通常是看不到的,那么就是抽象工厂能够通过改变激活的工厂方法动态的改变应用行为。
何时使用 #
通常一开始使用的是工厂方法,因为它更加简单,如果后来发现应用需要许多工厂方法,那么将创建一系列对象的过程合并在一起,而最终引入抽象方法。
代码示例https://github.com/lanms/Python_design_pattern/blob/master/01_factory_pattern/abstract_factory.py