zoukankan      html  css  js  c++  java
  • 【设计模式】简单工厂模式一

    面向过程->面向对象

    ?如何实现简单的计算器功能

    如计算俩个数字的和差之类,我们需要数字numbe_a、数字number_b、运算符operator以及结果result 

    面向过程
    class Operation:
        number_a = input("请输入第一个数字:")
        number_b = input("请输入第二个数字:")
        operator = input("请输入+ - * /的运算符:")
        result = 0
     
        if operator == "+":
            result = number_a + number_b
        elif operator == "-":
            result = number_a - number_b
        elif operator == "*":
            result = number_a * number_b
        elif operator == "/" and number_b != 0:
            result = number_a / number_b
        print("最终结果:" + result)

    上述代码存在一下几个问题:

    1、输入的number_a和number_b是str类型,需要给他们转换为number

    2、输入的运算符有可能不在我们的需要范围内,这时候代码没有做校验

    3、输入的number_a和number_b如果不可以转换为number类型该怎么处理?

    4、逻辑层和业务层在同一个class中,耦合度较高

    一般来说一个系统会有逻辑层业务层,那么我们可以根据这个方面进行拆分

    逻辑层
    class Operation:
        def __init__(self, number_a, number_b, operator):
            self.number_a = float(number_a)
            self.number_b = float(number_b)
            self.operator = operator
     
        def operation(self):
            result = 0
            if self.operator == "+":
                result = self.number_a + self.number_b
            elif self.operator == "-":
                result = self.number_a - self.number_b
            elif self.operator == "*":
                result = self.number_a * self.number_b
            elif self.operator == "/" and self.number_b != 0:
                result = self.number_a / self.number_b
            else:
                print('存在输入错误!')
            return "最终结果:" + str(result)
    业务层
    if __name__ == '__main__':
        try:
            your_number_a = input("请输入第一个数字:")
            your_number_b = input("请输入第二个数字:")
            your_operator = input("请输入+ - * /的运算符:")
            print(Operation(your_number_a, your_number_b, your_operator).operation())
        except Exception as e:
            print('存在输入错误!' + e)
  • 相关阅读:
    P7276-送给好友的礼物【dp】
    P4831-Scarlet loves WenHuaKe【组合数学】
    CF461D-Appleman and Complicated Task【并查集】
    P6499-[COCI2016-2017#2]Burza【状压dp】
    CF757F-Team Rocket Rises Again【最短路,DAG支配树】
    Loj#6053-简单的函数【Min25筛】
    P5325-[模板]Min_25筛
    2019.10.6 机房训练赛
    [CSP校内集训]v(记忆化搜索+map优化状压)
    [CSP校内集训]ac(树上启发式合并)
  • 原文地址:https://www.cnblogs.com/CSgarcia/p/12711835.html
Copyright © 2011-2022 走看看