1、什么是设计模式编程
每个模式描述了一个在咱们周围不断重复发生的问题,以及该问题的解决方案的核心。这样你就能一次又一次地使用该方案而没必要作重复劳动。”
每个设计模式系统地命名、解释和评价了面向对象系统中一个重要的和重复出现的设计。
GoF(Gang of Four)
设计模式四个基本要素:模式名称、问题、解决方案、效果
2、设计模式的七大原则设计模式
1、开放封闭原则:一个软件实体如类,模块和函数应该对扩展是开放的,对修改是关闭的。即软件实体应尽可能在不修改原有代码的状况下进行扩展(装饰器) 2、里氏替换原则:重写父类里面的方法,逻辑可能不同,可是返回的结果参数啥的要同样(全部引用基类的地方必须能透明的使用其子类的对象) 3、依赖倒置原则:高层模块不该该依赖低层模块,两者都应该依赖其抽象,要针对接口编程,而不是针对实现编程。(接口类) 4、接口隔离原则:使用多个专门的接口,而不使用单一的总接口,即客户端不该该依赖那些它不须要实现的接口 5、迪米特法则:一个软件实体应当尽量少的与其余实体发生相互做用 6、单一职责原则:一个类只负责一项职责(不要存在多于一个致使类变动的缘由,即一个类只负责一项职责) 7、合同复用原则:多用组合少用继承 一个类重用另外一个类的代码有两种方式 继承 组合
a、接口隔离原则ide
#假如说如今有这样的动物类 from abc import abstractmethod,ABCMeta #借助abc模块来实现接口 #接口类就是为了提供标准,约束后面的子类 # class Animal(metaclass=ABCMeta): # @abstractmethod # def walk(self): # pass # # @abstractmethod # def fly(self): # pass # # @abstractmethod # def swim(self): # pass # # class Frog(Animal): # '''像是这样定义一个青蛙类,因为接口类的方法都要被实现,而青蛙只会走,没不要要实现其余的方法 # 动物不一样会的功能也会不一样,因此这时候咱们就能够选择用接口隔离原则 # ''' # def walk(self): # print('青蛙会走') # # obj = Frog() # obj.walk() #会报错 # =====================改进-================= class AnimalOnLand(metaclass=ABCMeta): '''在陆地上的动物''' @abstractmethod def walk(self): pass class AnimalInSky(metaclass=ABCMeta): '''飞行动物''' @abstractmethod def fly(self): pass class AnimalInWater(metaclass=ABCMeta): '''在水里的动物''' @abstractmethod def swim(self): pass class Tiger(AnimalOnLand): def walk(self): print('老虎在地上') class Frog(AnimalOnLand,AnimalInWater): def swim(self): print('青蛙会游') def walk(self): print('会跳') obj = Tiger() obj.walk() obj = Frog() obj.walk() obj.swim() 接口隔离原则
b、继承和组合函数
# 合同复用原则:多用组合少用继承 class A: def test(self): return '你好啊' class B(A): #继承 def test(self): return 123 class C: def __init__(self): self.a = A() #组合 self.a.test() def test(self): return 789 print(B().test()) print(C().a) print(C().a.test()) print(C().test()) 继承和组合示例
3、设计模式分类spa
建立型模式:设计
总结建立型模式:代理
依赖于继承的建立型模式:工厂方法模式code
依赖于组合的建立型模式:抽象工厂模式,建立者模式对象
行为型模式:blog
结构性模式: