python 设计模式 开篇 第1篇

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)

原文地址:https://www.cnblogs.com/cavalier-chen/p/14708329.html