设计模式-工厂方法模式-factorymethod-python
来源:互联网 发布:制版软件 编辑:程序博客网 时间:2024/05/16 10:10
def
定义一个用于创建对象的接口, 让子类决定实例化哪一个类。 工厂方法使一个类的实例化延迟到其子类。
usage
一个对象创建是有条件约束的, 如一个调用者需要一个具体的产品对象, 只要知道这个产品的类名(或约束字符串) 就可以了, 不用知道创建对象的艰辛过程, 降低模块间的耦合。
在增加产品类的情况下, 只要适当地修改具体的工厂类或扩展一个工厂类, 就可以完成“拥抱变化”。
产品类的实现如何变化, 调用者都不需要关心, 它只需要关心产品的接口, 只要接口保持不变, 系统中的上层模块就不要发生变化。
工厂方法模式是典型的解耦框架。 高层模块值需要知道产品的抽象类, 其他的实现类都不用关心, 符合迪米特法则, 我不需要的就不要去交流; 也符合依赖倒置原则, 只依赖产品类的抽象; 当然也符合里氏替换原则, 使用产品子类替换产品父类。
code
class GreekGetter(object): """A simple localizer a la gettext""" def __init__(self): self.trans = dict(dog="σκύλος", cat="γάτα") def get(self, msgid): """We'll punt if we don't have a translation""" return self.trans.get(msgid, str(msgid))class EnglishGetter(object): """Simply echoes the msg ids""" def get(self, msgid): return str(msgid)def get_localizer(language="English"): """The factory method""" languages = dict(English=EnglishGetter, Greek=GreekGetter) return languages[language]()if __name__ == '__main__': # Create our localizers e, g = get_localizer(language="English"), get_localizer(language="Greek") # Localize some text for msgid in "dog parrot cat bear".split(): print(e.get(msgid), g.get(msgid))### OUTPUT #### dog σκύλος# parrot parrot# cat γάτα# bear bear
阅读全文
0 0
- 设计模式-工厂方法模式-factorymethod-python
- 设计模式--工厂方法(FactoryMethod)
- 设计模式工厂方法(FactoryMethod)
- 设计模式之--工厂方法模式(FactoryMethod )
- 设计模式 -- 工厂方法模式 FactoryMethod
- 设计模式之工厂方法模式(FactoryMethod)
- FactoryMethod 工厂方法模式
- 工厂方法模式(FactoryMethod)
- FactoryMethod 工厂方法模式
- factorymethod 工厂方法模式
- 设计模式之FactoryMethod(工厂方法)
- 设计模式(二) 工厂方法(FactoryMethod)
- 23设计模式之工厂方法(FactoryMethod)
- 23设计模式之工厂方法(FactoryMethod)
- 设计模式——工厂方法 FactoryMethod
- 【设计模式】——工厂方法FactoryMethod
- 23种设计模式-FactoryMethod工厂方法
- 23种设计模式-FactoryMethod(工厂方法)设计模式
- Eclipse中从svn中检出maven项目
- 前端开发常用库
- 硬链接为什么不能跨文件系统/不能链接目录?
- 1.23Android 学习+进度之二十三-同步和分析
- WinForm内移动、放大缩小控件出现闪屏问题的解决方法
- 设计模式-工厂方法模式-factorymethod-python
- dom监听属性的变化
- js动态生成select,并初始化后台原有数据
- MATLAB和C语言混合编程问题
- UE4 自动创建破碎物件的actor(C++版本)
- Filter过滤器例外URL设置
- CF679A Bear and Prime 100(prime)
- Android map api密匙获取 输入命令后显示keytool 不是内部或外部命令
- angulsrjs2.0---demo---使静态文字每秒随机变颜色