设计模式-设计原则(SOLID原则)
开放封闭原则
类,模块,函数应该对扩展开放,对修改关闭
里氏替换原则
所有引用基类的地方必须能透明地使用其子类的对象
class BaseMent(object): def return_something(self): pass class child(BaseMent): def return_something(self): pass def a_fun(c): res = c.return_something() ..... #a_fun中传入一个对象调用return_something(),保证BaseMent和child中继承的方法的参数和返回值必须一样, #保证里氏替换原则,不然a_fun中使用返回值进行接下来的逻辑会出错
依赖倒置原则
1、上层模块不应该依赖底层模块,它们都应该依赖于抽象。 2、抽象不应该依赖于细节,细节应该依赖于抽象。 针对接口编程而不是针对实现编程
from abc import ABCMeta,abstractmethod #这个类就是底层和上层的抽象 #这个就是抽象 class payment(object): __metaclass__ = ABCMeta @abstractmethod def pay(self,money): pass #这两个支付类就是模拟底层的实现逻辑 #下面是细节 class AliPay(payment): def pay(self,money): print "支付宝支付%d" % money pass class WeChatPay(payment): def pay(self,money): pass #模拟上层调用逻辑 p = AliPay() p.pay(100) #抽象不应该依赖于细节,细节应该依赖于抽象
接口隔离原则
使用多个专门的接口,不要使用总接口,即client不应该依赖不需要的接口 举例总接口
from abc import ABCMeta,abstractmethod class Animal(object): __metaclass__ = ABCMeta #抽象类提供的元类 @abstractmethod def walk(self): pass @abstractmethod def swim(self): pass @abstractmethod def fly(self): pass class pig(Animal): def walk(self): pass pig = pig() pig.walk() #假设猪只会走路,不会飞,但是继承抽象类就要实现所有抽象方法,会报错
所以不要使用总接口,应该把接口分开,只用专用的接口 修改
from abc import ABCMeta,abstractmethod class LandAnimal(object): __metaclass__ = ABCMeta #抽象类提供的元类 @abstractmethod def walk(self): pass class WaterAnimal(object): __metaclass__ = ABCMeta # 抽象类提供的元类 @abstractmethod def swim(self): pass class SkyAnimal(object): __metaclass__ = ABCMeta # 抽象类提供的元类 @abstractmethod def fly(self): pass class pig(LandAnimal): def walk(self): pass
单一职责原则
一个类应该只有一个发生变化的原因,人话就是:一个类负责一个职责,参考上面的动物类
下一篇:
力扣之水果成篮史上最全解法