zoukankan      html  css  js  c++  java
  • Python之简单工厂模式实现

    最近又看了下大话设计模式,决定用Python来试着实现下。

    基础类

    1 class OperationBase():
    2     """
    3     基础运算类
    4     """
    5     result = 0
    6     def GetResult(self):
    7         return self.result

    继承类

     1 class OperationAdd(OperationBase):
     2     """
     3     加法类,继承基础运算类
     4     """
     5     def __init__(self,numA,numB):
     6         self.result = numA + numB
     7     def GetResult(self):
     8         return self.result
     9 
    10 class OperationSub(OperationBase):
    11     """
    12     减法运算类,继承基础运算类
    13     """
    14     def __init__(self,numA,numB):
    15         self.result = numA - numB
    16     def GetResult(self):
    17         return self.result
    18 
    19 class OperationMult(OperationBase):
    20     """
    21     乘法运算类,继承基础运算类
    22     """
    23     def __init__(self,numA,numB):
    24         self.result = numA * numB
    25     def GetResult(self):
    26         return self.result
    27 
    28 class OperationDiv(OperationBase):
    29     """
    30     除法运算类,继承基础运算类,通过被除数为0异常捕获控制被除数不能为0
    31     """
    32     def __init__(self,numA,numB):
    33         try:
    34             self.result = numA / numB
    35         except ZeroDivisionError:
    36             print "除数不能为0!!!"
    37 
    38     def GetResult(self):
    39         return self.result
    40 
    41 #工厂类
    42 class OperationFactor():
    43     @staticmethod
    44     def createOperate(operate,numA,numB):
    45         for case in switch(operate):
    46             if case('+'):
    47                 oper = OperationAdd(numA,numB)
    48                 break
    49             if case('-'):
    50                 oper = OperationSub(numA,numB)
    51                 break
    52             if case('*'):
    53                 oper = OperationMult(numA,numB)
    54                 break
    55             if case('/'):
    56                 oper = OperationDiv(numA,numB)
    57                 break
    58         return oper
    59 
    60 if __name__ == '__main__':
    61     opt = raw_input("请输入一个运算操作符(+-*/):")
    62     try:
    63         numA = float(raw_input("请输入第一个运算的数字:"))
    64         numB = float(raw_input("请输入第二个运算的数字:"))
    65     except ValueError:
    66         print "输入数字不对,请重新输入!"
    67         numA = float(raw_input("请输入第一个运算的数字:"))
    68         numB = float(raw_input("请输入第二个运算的数字:"))
    69 
    70     oper = OperationFactor.createOperate(opt,float(numA),float(numB))
    71     print "Result = ",oper.GetResult()

    里面的case可以参考我另外一篇博客

    http://www.cnblogs.com/ListenWind/p/4267517.html

  • 相关阅读:
    XMPP serverejabberd-14.12本地搭建
    uva 699 The Falling Leaves(建二叉树同一时候求和)
    ORA-22828 输入样式或替换參数超过了32k限制大小
    Timus 1149. Sinus Dances 打印复杂公式
    POJ2226
    3149 爱改名的小融 2
    1169 传纸条 2008年NOIP全国联赛提高组 个人博客:attack.cf
    1019 集合论与图论
    1215 迷宫
    1020 孪生蜘蛛
  • 原文地址:https://www.cnblogs.com/ListenWind/p/4625403.html
Copyright © 2011-2022 走看看