设计模式——python

定义

设计模式是前辈们对代码开发经验的总结,是解决特定问题的一系列套路,他不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。

根据目的可以分为三类,创建型模式主要用于创建对象、结构型模式主要用于处理类或对象的组合、行为型模式主要用于描述对类和对象怎么交互和怎么分配职责

序号 模式 & 描述 包括
1 创建型模式
这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。
  • 工厂模式(Factory Pattern)
  • 抽象工厂模式(Abstract Factory Pattern)
  • 单例模式(Singleton Pattern)
  • 建造者模式(Builder Pattern)
  • 原型模式(Prototype Pattern)
2 结构型模式
这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。
  • 适配器模式(Adapter Pattern)
  • 桥接模式(Bridge Pattern)
  • 过滤器模式(Filter、Criteria Pattern)
  • 组合模式(Composite Pattern)
  • 装饰器模式(Decorator Pattern)
  • 外观模式(Facade Pattern)
  • 享元模式(Flyweight Pattern)
  • 代理模式(Proxy Pattern)
3 行为型模式
这些设计模式特别关注对象之间的通信。
  • 责任链模式(Chain of Responsibility Pattern)
  • 命令模式(Command Pattern)
  • 解释器模式(Interpreter Pattern)
  • 迭代器模式(Iterator Pattern)
  • 中介者模式(Mediator Pattern)
  • 备忘录模式(Memento Pattern)
  • 观察者模式(Observer Pattern)
  • 状态模式(State Pattern)
  • 空对象模式(Null Object Pattern)
  • 策略模式(Strategy Pattern)
  • 模板模式(Template Pattern)
  • 访问者模式(Visitor Pattern)

根据范围,即模式主要用于处理类之间的关系还是处理对象之间的关系,可分为:

类模式:处理类与子类之间的关系,这些关系通过继承建立,在编译时就被确定下来,属于静态的;

对象模式:处理对象之间的关系,这些关系在运行时候变化,更具动态性;

统一建模语言——UML

定义了用例图、类图、对象图、状态图、活动图、顺序图、合作图、组件图、部署图

类之间关系的耦合强弱关系

泛化=实现>组合>聚合>关联>依赖

设计原则

donot repeat yourself(DRY)

不要重复,DRY是一个最简单的法则,也是最容易理解的。当我们发现在两个或多个地方发现一些相似的代码的时候,我们需要把他们的共性抽象出来形成一个唯一的新方法

keep it simple,stupid(KISS)

保持简单,KISS原则在设计上可能最被推崇的。

program to an interface,not an implementation

这是设计模式中最基本的哲学,注重和依赖接口,而不是实现。接口是抽象和稳定的,实现则是多种多样的。

YAGNI

只考虑和设计必要的功能,避免过度设计。

共同封装原则

将容易变的类放在同一个包里,将变化隔离出来。

高内聚低耦合

常用的降低耦合度的方法:

1.少使用类的继承,多用接口来隐藏实现

2.模型的功能尽量单一

3.少使用全局变量

4.类和方法尽量使用私有

5.尽量不使用硬编码,也不要用sql语句操作数据库

6.避免直接操作或调用其他模块和类,如果必须存在耦合,则原则上尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,避免使用内容耦合。

组合大于继承

command-query separation(CQS)——命令-查询分离原则

约定大于配置

law of demeter(LOD)—迪米特法则/最少知识原则

一个对象应该对其他对象保持最少的了解,只与自己熟悉的对象进行通信

single responsibility principle(SRP)—职责单一原则

一个类,只做一件事,并把这件事做好;

open/closed principle(OCP)—开闭原则/开放封闭原则

软件中的对象(模块、类、函数)应该对扩展是开放的,对修改是封闭的。

liskov substitution principle(LSP)—里氏代换原则

允许子类扩展父类没有的方法,但是不主张重写父类的方法

interface segregation principle(ISP)—接口隔离原则

把功能实现在接口中而不是类中,使用多个专门的接口比使用单一的总接口要好;

dependency inversion principle(DIP)依赖倒置原则

高层模块不应该依赖于底层模块的实现,而是依赖于高层抽象。

你可能感兴趣的:(python,设计模式)