设计模式

设计模式

软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。每一个设计模式系统的命名、解释和评价了面向对象系统中一个重要的和重复出现的设计。

  • "四人帮" (Gang of Four, GoF)

  • <<设计模式: 可复用面向对象软件的基础>>

面向对象

设计模式是面向对象的设计

封装

  • 把属性和方法封装到类里,体现出类里面和类外面

  • Python 私有 __ _类里能访问,类外不能访问概念

继承

  • 类之间的复用代码

多态

  • Python是多态语言,程序员可不用多关注

接口

接口:若干抽象方法的集合

作用:限制实现接口的类必须按照接口给定的调用方式实现这些方法;使用者通过了解接口就可以明白实现类的使用方式

class Payment(object):
    def pay(self, money):
        raise NotImplementedError

class AliPay(Payment):
    pass

class WechatPay(Payment):
    def pay(self, money):
        pass

a = AliPay()
# a.pay(1000)    # 不调用,不抛出异常

w = WechatPay()
w.pay(1000)      # 已实现,调用不抛出异常
from abc import ABCMeta, abstractmethod

class Payment(metaclass=ABCMeta):
    @abstractmethod
    def pay(self, money):
        pass

class AliPay(Payment):
    pass

a = AliPay()    # AliPay必须实现抽象方法,否则会抛出异常

面向对象设计原则

SOLID原则

  • 开放封闭原则:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。即软件实体尽量在不修改原有代码的情况下进行扩展;

  • 里式替换原则:所有引用父类的地方必须能透明地使用其子类的对象;

  • 依赖倒置原则:高层模块不应该依赖底层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。换言之,要针对接口编程,而不是针对实现编程;

  • 接口隔离原则:使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口;

  • 单一职责原则:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责

设计模式分类

  • 创建型模式:怎样创建对象,目的隐藏底层逻辑

  • 结构型模式:几个类之间协同工作

  • 行为型模式:侧重方法

Last updated