【学习笔记】设计模式

94 阅读2分钟

设计模式是一套代码设计经验的总结,它们提供了一个标准的术语系统,且具体到特定的情景。是我们在软件开发过程中面临的一般问题的解决方案,这些解决方案是经过长时间的试验和错误总结出来的。

六大设计原则:

  1. 单一职责原则:一个类/接口/方法只负责一项职责,避免负责多项职责的情况;
  2. 开闭原则:对扩展开放,对修改关闭;
  3. 里氏代换原则:子类可以扩展父类的功能,但不能改变父类原有的功能;
  4. 依赖倒转原则:抽象不应该依赖于细节,细节应该依赖于抽象。即:针对接口或抽象类编程,而不是针对具体类编程;
  5. 合成/聚合复用原则:尽量使用合成/聚合的方式,而不是使用继承来达到复用的目的;
  6. 迪米特法则:又称最少知道原则,就是尽可能地减少实体之间的交互作用,即耦合;

1、简单工厂模式

工厂类根据不同的条件创建不同的产品类,这些类通常有一个共同的父类或接口。简单工厂模式将对象的创建与使用分离。

以运算工厂为例,到底要实例化谁,将来会不会增加实例化的对象,比如增加开根运算,这是很容易变化的地方,应该考虑用一个单独的类来做这个创造实例的过程,这就是工厂。

简单工厂模式.png

class OperationFactory:
    @staticmethod
    def create_operate(operate):
        oper = None
        if operate == "+":
            oper = OperationAdd()
        elif operate == "-":
            oper = OperationSub()
        elif operate == "*":
            oper = OperationMul()
        elif operate == "/":
            oper = OperationDiv()
        
        return oper

class Operation:
    def calculate(self, a, b):
        pass

class OperationAdd(Operation):
    def calculate(self, a, b):
        return a + b

class OperationSub(Operation):
    def calculate(self, a, b):
        return a - b

class OperationMul(Operation):
    def calculate(self, a, b):
        return a * b

class OperationDiv(Operation):
    def calculate(self, a, b):
        return a / b
        
operation = OperationFactory.create_operate("+")
a, b = 666, 66
result = operation.calculate(a, b)
print('{} + {} = {}'.format(a, b, result))

2、策略模式

它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。

WX20230706-083920.png