python设计模式之简单工厂(一)

来源:互联网 发布:js设置div文本内容 编辑:程序博客网 时间:2024/05/14 12:03

本文章根据《大话设计模式》一书进行修改,只是将原书作者的成果从C#“翻译”到python,基本的思想理论都是一样的,只是语言上的差别有少许出入。

何谓设计模式?简单来说设计模式就是进行一个模块化的分离,实现高内聚低耦合的状态,这种情况不光是在计算机领域有所应用,在实际的生活中也是会遇到。在《大话设计模式》的第五章中讲述了一个修电脑和修收音机的故事,这个故事生动地描述了模块化的好处。计算机发展到现在已经很成熟了,超大规模的集成电路将原本很庞大的机器变得越来越小,计算机将CPU、主板、内存等一一拆分开来,各个模块之间协同合作,当有一块模块坏掉之后,只要稍微有点经验的人都可以动手更换已损坏的单元模块以达到维修好计算机的目的。但是从另一个产品——收音机来看,收音机基本只是一个“整体”模块,当一个没有具备专业知识的人的收音机坏掉了,他如果想修好这个收音机,那么他应该具备很多数字电路、模拟电路以及其他专业知识。收音机作为“一个”模块,坏掉的可能只是一个二极管或者是一个电感之类的元件,但是作为普通人来说,99%的人都不知道从何下手。计算机就不一样了,假如CPU坏了(当然怎么检查到CPU损坏的事情就是读者的技术了),那么我们更换一块即可。从这个简单的例子来说,设计模式对程序的影响是非常大的。

言归正传,本次介绍的是简单工厂模式,这个模式作为入门介绍。《大话设计模式》将这个设计模式作为开篇文章,那么说明这个模式还是比较简单的。

下面请看代码:

# !/usr/bin/python#coding:utf-8class Operation(object):    def __init__(self, number_a = 0, number_b = 0):        self.number_a = number_a        self.number_b = number_b            def getResult(self):        #需要重写        return class Add(Operation):    def getResult(self):        return self.number_a + self.number_bclass Sub(Operation):    def getResult(self):        return self.number_a - self.number_bclass Mul(Operation):    def getResult(self):        return self.number_a * self.number_bclass Div(Operation):    def getResult(self):        if 0 != self.number_b:            return self.number_a / self.number_b        else:            raise ZeroDivisionError('除数不能为0!')class Factory(object):    #工厂生产    @staticmethod    def produce(operate):        if '+' == operate:            return Add()        elif '-' == operate:            return Sub()        elif '*' == operate:            return Mul()        elif '/' == operate:            return Div()class Factory_2(object):    #另一种实现    Items = {'+' : Add, '-' : Sub, '*' : Mul, '/' : Div}    def __new__(cls, operate):        return Factory_2.Items.get(operate)()def main():#     obj = Factory.produce('+')    obj = Factory_2('+')    obj.number_a = 10   #此处是违背封装原则的    obj.number_b = 20    print(obj.getResult())         if __name__ == '__main__':    main()

上面的代码基于python3,读者可以自行根据所需要进行运行。如果有什么不清楚的可以查阅《大话设计模式》第一章以获得更详细的描述。


小编能力有限,文中有些许不足和错误之处,欢迎读者来信进行讨论和交流:xiongqiao.get@foxmail.com。

(完)



0 0
原创粉丝点击