单例模式Singleton
- 懒汉式:获取实例时才创建
-
懒汉式的线程安全问题
在多个线程中同时获取实例,此时可能出现多个构造函数被同时调用
- 线程锁和二次检查
if (instance == NULL){// 多个线程进入此处,同一时刻只有一个线程可以获得锁,创建实例lock();// 二次检查防止后续获取锁的线程重复创建实例if (instance == NULL){instance = new Singleton();}unlock();return instance;}
工厂模式Factory
简单工厂
提供一个创建对象示例的功能,而无需关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。
- Api: 定义客户所需要的功能接口
- Impl: 具体实现Api的实现类,可能存在多个
- Factory: 工厂,选择合适的实现类来创建Api接口对象
- Client: 客户端,通过Factory来获取Api接口对象,然后面向Apij接口编程
——《研磨设计模式》:第二章 简单工厂
- 线程锁和二次检查
用于隔离接口和实现
- 一个抽象接口来描述不同实现的统一调用接口,工厂类负责创建不同的实现实例,实现隐藏在工厂方法内部 ```python import abc
class Interface(metaclass=abc.ABCMeta):
@abc.abstractmethoddef func(self):pass
class ImplA(Interface):
def func(self):print('实例1')
class ImplB(Interface):
def func(self):print('示例2')
class Factory():
def create_instance(self, arg: int) -> Interface:if arg == 1:return ImplA()elif arg == 2:return ImplB()else:return None
if name == ‘main‘: fac = Factory()
ins = fac.create_instance(1)ins.func()ins = fac.create_instance(2)ins.func()
