1. 设计模式的定义
软件设计中普遍存在的 反复出现的 各种问题 所提出的解决方案
首先,什么是软件设计?
系统开发 项目开始的时候 需要做 需求分析 软件系统设计 软件建模 类的设计 接口的设计 等等。。。
设计模式解决的就是 软件设计 过程中出现的问题 这类问题 经常出现 反复遇到 因此 前人就总结 出了 应对这类问题的23种套路
感兴趣可以找一本书 《设计模式:可复用面向对象软件的基础》
2. 面向对象基础
设计模式 是 用于解决 软件建模过程中 设计类 设计接口 遇到的普遍问题,因此有必要复习一下 面向对象的知识
三大特性:
封装
将 方法,属性 封装到一个类 中,通过对象来访问或者调用 类或对象的属性以及方法,类 里面的方法 有 私有方法 公有方法,这个知识点 可以自行了解一下
继承
实现类与类之间的代码的复用, 猫,狗,都有吃,睡的方法,既可以抽象 成一个 宠物的类
多态
这个 就有点复杂 不好解释
3. 接口
接口 这个词 对于开发人员来讲 是每天都听到的词 对外暴露的 供调用者 调用的方法
定义:若干抽象方法的集合
4 python 实现接口定义的两种常用方式
4.1 通过 父类 中 抛出NotImplementedError 定义子类必须要实现的 方法 实现接口的定义
这样定义接口的话 如果不调用 接口 只是 实例化一个对象的话 不会报错的 因此 接口的定义还不是很严密
class Payment:
def pay(self, money):
raise NotImplementedError
class Alipay(Payment):
def pay(self, money):
print("Ali payed %d" % money)
class WechatPay:
def pay(self, money):
pass
if __name__ == '__main__':
p = Alipay()
p.pay(100)
4.2 通过 抽象类 实现接口的定义
from abc import ABCMeta, abstractmethod
class Payment(metaclass=ABCMeta):
@abstractmethod
def pay(self, money):
pass
class Alipay(Payment):
def pay(self, money):
print("Alipay pay %d" % money)
class WechatPay(Payment):
def pay(self, money):
print("Wechat pay %d" % money)
if __name__ == '__main__':
p = Alipay()
p.pay(100)