PYTHON-Pattern
单例设计模式
假设你在开发一个程序,它的所有配置项都保存在一个特定文件中。在项目启动时,程序需要从配置文件中读取所有配置项,然后将其加载进内存供其他模块使用。
由于程序执行时只需要一个全局的配置对象,因此你觉得这个场景非常适合使用经典设计模式:单例模式(singleton pattern)。
下面的代码就应用了单例模式的配置类 AppConfig:
1 | class AppConfig: |
c1 = AppConfig()
c2 = AppConfig()
c1 is c2 ➊
True
1 | ❶ 测试单例模式,调用 AppConfig() 总是会产生同一个对象 |
from project.config import AppConfig
db_conf = AppConfig().get_database()
重新加载配置
AppConfig().reload()
1 |
|
class AppConfig:
“”“程序配置类,使用单例模式”“”
def __init__(self): ➊
# 省略:从外部配置文件读取配置
...
_config = AppConfig() ➋
1 | ❶ 完全删掉单例模式的相关代码,只实现 __init__ 方法 |
file: project/config.py
_config = Config()
get_database_conf = _config.get_database
reload_config = _config.reload
1 | 之后,其他模块就可以像调用普通函数一样操作应用配置对象了: |
from project.config import get_databse_conf
db_conf = get_databse_conf()
reload_config()
通过“预绑定方法模式”,我们既避免了复杂的单例设计模式,又有了更易使用的函数 API,可谓一举两得。
评论