首页 > 代码库 > python简单工厂模式解析

python简单工厂模式解析

下面考虑《大话设计模式》中的一个例子:

题目:用任意一种面向对象语言实现一个计算器控制台程序。要求输入两个数和运算符号,得到结果。

题目分析:

程序应该做到:(1)可维护;(2)可复用;(3)可扩展;(4)灵活性好。
可维护:就是说代码一处更改,不能产生连锁反应,不能影响其他地方。
可复用:尽量减少重复性代码。
可扩展:如果要扩展新的功能、新的业务,则只需要增加新的类就好了,不对已有的类和逻辑产生影响。插拔式的应用。

面向对象要点:
面向对象三大特性:封装、继承、多态。
通过封装、继承、多态把程序耦合降低。
业务逻辑和界面逻辑分开。

 

 1 # coding=utf-8
 2 # 简单工厂模式的介绍及代码实例
 3 # 举个加减乘除的例子
 4 # 定义一个父类,预留接口
 5 class Operation(object):
 6     def __init__(self, num1 = 0, num2 = 0):
 7         self.num1 = num1
 8         self.num2 = num2
 9 
10     # 这是一个预留的统一的接口,子类可以根据自己的情况调用这个接口,实现自己的特殊功能
11     def get_result(self):
12         pass
13 
14 
15 class Add(Operation):
16     def get_result(self):
17         return self.num1 + self.num2
18 
19 class Minus(Operation):
20     def get_result(self):
21         return self.num1 - self.num2
22 
23 class Multi(Operation):
24     def get_result(self):
25         return self.num1 * self.num2
26 
27 class Divide(Operation):
28     def get_result(self):
29         try:
30             return self.num1/self.num2
31         except:
32             return 被除数不能为0,请重新输入
33 
34 # 这个就是一个工厂,根据用户的输入选择来调用相应的类去创建实例完成任务
35 class OptionFactory():
36     def choose(self,op):
37         if op == +:
38             return Add()
39         if op == -:
40             return Minus()
41         if op == *:
42             return Multi()
43         if op == /:
44             return Divide()
45 
46 # 根据用户输入来决定调用哪个类,这就是工厂类的作用
47 if __name__ == __main__:
48     ch = ‘‘
49     while not ch == q:
50         num1 = eval(raw_input(Please input number1:  ))
51         op = str(raw_input(Please input the operation:  ))
52         num2 = eval(raw_input(Please input number2:  ))
53         OPFactory = OptionFactory()
54         OPType = OPFactory.choose(op)
55         OPType.num1 = num1
56         OPType.num2 = num2
57         print The result is:, OPType.get_result()
58         try:
59             ch = str(raw_input())
60         except:
61             ch = ‘‘

 

python简单工厂模式解析