zoukankan      html  css  js  c++  java
  • <原创>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 = ''
  • 相关阅读:
    YARN的设计
    在(MRv1)中JobTracker工作方式
    经典 MapReduce框架(MRv1)
    进程与线程的简单解释
    Java序列化的机制和原理
    ibatis源码学习4_参数和结果的映射原理
    ibatis源码学习3_源码包结构
    ibatis源码学习2_初始化和配置文件解析
    ibatis源码学习1_整体设计和核心流程
    spring中的设计模式
  • 原文地址:https://www.cnblogs.com/yezefei/p/7290572.html
Copyright © 2011-2022 走看看