设计模式是一套代码设计经验的总结,它们提供了一个标准的术语系统,且具体到特定的情景。是我们在软件开发过程中面临的一般问题的解决方案,这些解决方案是经过长时间的试验和错误总结出来的。
六大设计原则:
- 单一职责原则:一个类/接口/方法只负责一项职责,避免负责多项职责的情况;
- 开闭原则:对扩展开放,对修改关闭;
- 里氏代换原则:子类可以扩展父类的功能,但不能改变父类原有的功能;
- 依赖倒转原则:抽象不应该依赖于细节,细节应该依赖于抽象。即:针对接口或抽象类编程,而不是针对具体类编程;
- 合成/聚合复用原则:尽量使用合成/聚合的方式,而不是使用继承来达到复用的目的;
- 迪米特法则:又称最少知道原则,就是尽可能地减少实体之间的交互作用,即耦合;
1、简单工厂模式
工厂类根据不同的条件创建不同的产品类,这些类通常有一个共同的父类或接口。简单工厂模式将对象的创建与使用分离。
以运算工厂为例,到底要实例化谁,将来会不会增加实例化的对象,比如增加开根运算,这是很容易变化的地方,应该考虑用一个单独的类来做这个创造实例的过程,这就是工厂。
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、策略模式
它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。