Python3高级编程第2版-有用的设计模式

学习总结:Python高级编程第2版 - 有用的设计模式

  • 创建型模式:用于生成具有特定行为的对象
  • 单例模式
  • 结构型模式:有助于为特定用例构建代码
  • 适配器模式
  • 代理模式
  • 外观模式
  • 行为模式:有助于分配责任和封装行为
  • 观察者模式
  • 访问者模式
  • 模板模式

创建型模式

单例模式

通过__new__方法实现

1
2
3
4
5
6
class Singleton:
_instance = None
def __new__(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super().__new__(cls, *args, **kwargs)
return cls._instance

这种方式不适用于继承的情况。如果你已经创建了一个基类的实例,那么当你尝试对你的单例基类进行子类化并创建一个新的子类的实例时,问题就开始了。

通过__call__方法实现

1
2
3
4
5
6
class Singleton:
_instance = {}
def __new__(cls, *args, **kwargs):
if cls not in cls._instance:
cls._instance[cls] = super().__call__(cls, *args, **kwargs)
return cls._instance[cls]

通过共享__dict__实现

1
2
3
4
5
6
class Singleton:
_state = {}
def __new__(cls, *args, **kwargs):
ob = super().__new__(cls, *args, **kwargs)
ob.__dict__ = cls._state
return ob

这种方式不适用于子类重写 __getattr__函数的情况。

结构型模式