[Python-pattern design] Factory method pattern

[转载]: http://whilefalse.net/2009/10/21/factory-pattern-python-__new__/

Python中Factory method的使用借鉴

class Winter(object):
    def display(self):
        print 'Winter'
class Summer(object):
    def display(self):
        print 'Summer'
class Autumn(object):
    def display(self):
        print 'Autumn'
class Spring(object):
    def display(self):
        print 'Spring'

class Season(object):
    seasons = {'winter': Winter, 'summer': Summer, 'autumn': Autumn, 'spring': Spring}
    
    def __new__(cls,season):
        print "creating a new season %s" % season
        return Season.seasons[season]()
 
def testSeason():
    s = Season('winter')
    s.display()
       
if __name__ == '__main__':
    testSeason()


### 设计模式与原则概述 在Python中,设计模式是解决特定问题的通用模板或方法。这些模式不仅提高了代码的可重用性和灵活性,还使得程序更易于理解和维护[^2]。 #### 单例模式 (Singleton Pattern) 单例模式确保某一个类只有一个实例存在,并提供全局访问点来获取该实例。这通常用于配置管理器或其他需要唯一实例的对象创建场景: ```python class Singleton(type): _instances = {} def __call__(cls, *args, **kwargs): if cls not in cls._instances: cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs) return cls._instances[cls] class ConfigManager(metaclass=Singleton): pass ``` #### 工厂模式 (Factory Pattern) 工厂模式通过定义接口负责创建其他对象而不指定具体实现细节的方式简化了对象创建过程。这种方式可以提高系统的扩展性并减少依赖耦合度: ```python from abc import ABCMeta, abstractmethod class Creator(metaclass=ABCMeta): @abstractmethod def factory_method(self): pass def some_operation(self) -> str: product = self.factory_method() result = f"Creator: The same creator's code has just worked with {product.operation()}" return result class ConcreteProductA(object): def operation(self) -> str: return "{Result of the ConcreteProductA}" class ConcreteCreatorA(Creator): def factory_method(self) -> ConcreteProductA: return ConcreteProductA() creator_a = ConcreteCreatorA() print(creator_a.some_operation()) ``` #### 装饰者模式 (Decorator Pattern) 装饰者模式允许动态地给某个对象添加功能而不需要修改其结构。这种模式非常适合于构建具有多个可选属性的功能组件,在不改变原有逻辑的基础上增加新的行为特性: ```python def make_bold(fn): def wrapped(): return "<b>" + fn() + "</b>" return wrapped @make_bold def hello_world(): return "hello world" print(hello_world()) # 输出:<b>hello world</b> ``` #### 开闭原则 (Open/Closed Principle) 开闭原则指出软件实体应该对扩展开放,但是对其修改关闭。这意味着当需求发生变化时,可以通过新增模块而不是更改现有代码的方式来满足变化的需求。遵循这一原则有助于降低后期维护成本以及增强系统的稳定性和安全性.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值