一、啥是设计模式
Christopher Alexander说过,模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样你就能一次又一次地使用该方案而不必做重复劳动。
每一个设计模式系统地命名、解释和评价了面向对象系统中一个重要的和重复出现的设计。
设计模式四个基本要素:模式名称、问题、解决方案、效果
二、对象/类
封装:把属性和方法,封装到对象里面,就可以通过对象来调用。私有方法封装在类里面,外界不可见
继承:子类可以直接使用父类拥有的属性和方法
多态:
三、接口
一种特殊的类,声明了若干方法,要求继承该接口的类必须实现这些方法。对子类的形成约束
作用:限制继承接口的类的方法的名称及调用方式;隐藏类的内部实现
利用raise方法,抛出异常
#!/usr/bin/env python # -*- coding: utf8 -*- # __Author: "Skiler Hao" # date: 2017/6/2 15:45 class Payment: def pay(self,money): raise NotImplementedError class AliPay(Payment): def pay(self,money): print("支付宝支付%s元" % money) class ApplePay(Payment): def pay(self,money): print("苹果支付支付%s元" % money) class WechatPay(Payment): pass WechatPay().pay(100)
Python接口实现方式一
利用abc包,实现接口
#!/usr/bin/env python # -*- coding: utf8 -*- # __Author: "Skiler Hao" # date: 2017/6/2 15:45 from abc import ABCMeta, abstractmethod class Payment(metaclass=ABCMeta): @abstractmethod def pay(self, money): pass class AliPay(Payment): def pay(self, money): print("支付宝支付%s元" % money) class ApplePay(Payment): def pay(self, money): print("苹果支付支付%s元" % money) class WechatPay(Payment): def zhifu(self): pass WechatPay()
python接口实现方式二
四、设计模式六大原则
- 开闭原则:一个软件实体如类、模块和函数应该对扩展开放,对修改源代码关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。
- 里氏(Liskov)替换原则:所有引用基类(父类)的地方必须能透明地使用其子类的对象。使用父类的地方,都可以使用子类。Python自动实现
- 依赖倒置原则:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。换言之,要针对接口编程,而不是针对实现编程。接口是沟通高层代码和底层代码的桥梁。使用时直接看高层的接口即可。
- 接口隔离原则:使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。就是总接口尽量是多个。子类可以继承多个父类。
- 迪米特法则:一个软件实体应当尽可能少地与其他实体发生相互作用。解耦,解除类与类之间的关系。
- 单一职责原则:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。
五、设计模式的分类
a、创建型模式:
- 工厂方法模式
- 抽象工厂模式
- 创建者模式
- 原型模式
- 单例模式
b、结构型模式
- 适配器模式
- 桥模式
- 组合模式
- 装饰模式
- 外观模式
- 享元模式
- 代理模式
c、行为型模式
- 解释器模式
- 责任链模式
- 命令模式
- 迭代器模式
- 中介者模式
- 备忘录模式
- 观察者模式
- 状态模式
- 策略模式
- 访问者模式
- 模板方法模式
时间: 2024-10-18 07:34:01