《大话设计模式》这本书中各种设计模式的python代码实现。
简单工厂模式的UML图
工厂模式在很多场景都可以应用,运用类的继承、多态等强大的特点可以有效减少代码冗余,提高代码的高可复用性。
#! /usr/bin/env python
# -*- coding:utf-8 -*-
"""
简单工厂模式
特点:工厂可以根据情况生产不同的产品(类或类实例)
例子:接受输入并能实现加减乘除的计算器
"""
class Operation(object):
def GetResult(self, par1, par2):
pass
class AddOperation(Operation):
def GetResult(self, par1, par2):
self.par1 = par1
self.par2 = par2
return self.par1 + self.par2
class SubOperation(Operation):
def GetResult(self, par1, par2):
self.par1 = par1
self.par2 = par2
return self.par1 - self.par2
class MulOperation(Operation):
def GetResult(self, par1, par2):
self.par1 = par1
self.par2 = par2
return self.par1 * self.par2
class DivOperation(Operation):
def GetResult(self, par1, par2):
self.par1 = par1
self.par2 = par2
return self.par1 / self.par2
class UndefinedOperation(Operation):
def GetResult(self, par1, par2):
return 'the signal is undefined.'
class Factory(object):
operationdict = {
'+': AddOperation(),
'-': SubOperation(),
'*': MulOperation(),
'/': DivOperation()}
def getoperation(self, signal, par1, par2):
if signal in self.operationdict:
return self.operationdict[signal].GetResult(par1, par2)
else:
return UndefinedOperation().GetResult(par1, par2)
if __name__ == '__main__':
signal = raw_input('input the signal:')
par1 = float(raw_input('the first one number:'))
par2 = float(raw_input('the second one number:'))
print 'the result is: %s' % Factory().getoperation(signal, par1, par2)