python 设计模式之工厂模式、抽象工厂模式
程序员文章站
2022-04-30 12:02:15
...
python 设计模式之工厂模式、抽象工厂模式
1、工厂模式
-
定义:
- 定义一个用于创建对象的函数,让子类决定实例化哪一个类。工厂模式使一个类的实例化延迟到其子类。
-
优点:
- 良好的封闭性,代码结构清晰。一个对象的创建是有条件约束的,入一个调用者需要一个具体的产品对象,只要知道这个产品的类名(或约束字符串)就可以了,不用知道创建者的艰辛过程,降低模块间的耦合。
- 工厂模式的扩展性非常优秀。在增加产品类的情况下,只要适当地修改具体的工厂类或扩展一个工厂类,就可以完成 “拥抱变化”。
- 屏蔽产品类。一个产品对象具体由哪一个产品生成是由工厂类决定的。
- 工厂模式是典型的解耦框架。
-
工厂模式案例:
#! /usr/bin/env python # -*- coding: utf-8 -*- class A: def __init__(self): self.word = "运行A" def run(self): print(self.word) class B: def __init__(self): self.word = "运行B" def run(self): print(self.word) def interface(classname): """ 工厂模式接口函数 :param classname: :return: """ run = dict(A=A, B=B) return run[classname]() if __name__ == '__main__': test1 = interface('A') test1.run() test2 = interface('B') test2.run() 运行结果: 运行A 运行B 2、抽象工厂模式
2、抽象工厂模式
-
定义:
- 为创建一组相关或互相依赖的对象提供一个接口,而且无需指定它们的具体类。(抽象工厂模式是工厂模式的升级版本)
-
优点:
- 封装性,每个产品的实现不是高层模块需要关心的,只要知道工厂类是谁,就能创建出一个需要的对象。
- 产品族内的约束为非公开状态。
-
缺点:
- 产品族扩展非常困难。因为每次扩展都需要修改抽象类。
-
抽象工厂模式案例:
#! /usr/bin/env python # -*- coding: utf-8 -*- class A: def __init__(self): self.word = "运行A" def run(self): print(self.word) class B: def __init__(self): self.word = "运行B" def run(self): print(self.word) class Interface: """ 抽象工厂模式接口类 :param classname: :return: """ def __init__(self, classname=None): self.test = classname def run(self): self.test().run() if __name__ == '__main__': test1 = Interface() test1.test = A test1.run() test1.test = B test1.run() # 结果: # 运行A # 运行B
上一篇: 当酷睿i9-9900K遇上47W被动散热器:100度高温而已
下一篇: 微信小程序flex布局