首页 > 其他 > 详细

设计模式-01-概述

时间:2020-07-20 01:01:55      阅读:79      评论:0      收藏:0      [点我收藏+]

概述

设计模式是前人对代码开发经验的总结,是解决一系列问题的套路。 是一套解决代码可复用性、可维护性、可读性、稳健性以及安全性的安全的解决方案。

1995年,GoF(Gang of Four)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了23种设计模式,从此建立了软件设计领域的里程碑,江湖人称[GoF设计模式]。

这23种设计模式的本质是对面向对象设计原则的运用,是对类的继承性、封装性和多态性,以及类的关联关系和组合关系的充分理解。每一个模式描述了一个在我们周围重复出现的问题,以及该问题的解决方案的核心,这样子你就能一次又一次高效地解决问题。

软件研发是复杂的

软件工程是复杂的,而复杂的根本来源是改变。这些改变包含客户需求的变化,技术平台的变化,开发团队的变化,市场环境的变化

如何解决复杂问题

人类解决复杂问题一般有两种思路:一种是分解,一种是泛化。

  • 分解

将复杂问题分解为一系列能解决的小问题,然后分而治之。

  • 抽象

由于不能完全掌握复杂对象的所有细节,因此选择忽视了它的非本质因素,而去处理泛化和理想化了模型。

设计模式要实现的目的

如上所述,设计模式要解决的问题是程序的复用性、可拓展性、可读性,其中最重要的就是复用性

可复用性

即对于不同的模块要实现相同的功能,不应该复制代码,而是要复用代码

编程大师Martin Folwer说过,代码的坏味道有很多种,而首当其冲的是代码重复(duplicate code)。

Why Design Pattern

变化是复用的天敌,面向对象设计最大的优势在于:迎合变化

六大设计原则

设计原则比设计模式更重要。所有的设计模式都遵循设计原则,理解设计原则将来我们自己就能设计出各种各样的涉及模式。

6大设计原则分别是:

  • 依赖倒置原则
  • 开闭原则
  • 单一职责
  • 迪米特法则
  • 里氏替换原则
  • 接口隔离原则

依赖倒置原则(DIP | Dependency Iversion Principle)

高层模块(稳定)不应该依赖于底层模块(变化),而应该依赖于抽象。
抽象(稳定)不应该依赖于具体(变化),具体应该依赖于抽象。

如第一节所说,软件设计是复杂的,复杂的原因是开发过程中的各种变化。虽然软件开发充满变化,但是其中还是有不变的地方,因此就需要把变化的部分和不变的部分进行隔离。
从宏观上来说,这里说的变化就是低层模块,稳定指的是高层模块。
从语言层面来说,变化指的是具体的类,稳定指的是抽象,如接口、抽象类。

开闭原则(OCP | Open-Closed Principle)

In object-oriented programming, the open/closed principle states "software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification"; that is, such an entity can allow its behaviour to be extended without modifying its source code.
--- from Wikipedia

在面向对象的编程中,开闭原则说明:软件实体(模块,类,函数等)应该对拓展开放,对修改关闭,即:一个实体能够不动他的源代码进行拓展。

意思就是:要使用拓展的方式来应对的需求的变化。

TIP

这里指的修改是二进制编译层面的,意思就是你修改了这个东西需要重新哪些文件才可以重新使用。

单一职责(SRP | Single Resonsibility Principle)

a class should only have one responsibility, which is further defined by Martin as ‘one reason to change
--- from Wikipedia

一个类应该只有一个职责。 这一原则Martin拓展为: 一个软件实体应该只有引起他改变的原因。

迪米特法则(Law of Demeter)

Law of Demeter or Least of Knowledge is a design principle for developing software, particular Object-oriented-programs.In its general form, the LoD is a specific case of loose coupling .

  • Each unit should have only limited knowledge about other units: only units "closely" related to the current unit.
  • Each unit should only talk to its friends; don‘t talk to strangers.
  • Only talk to your immediate friends.

迪米特法则(又称最少知道原则)是一个软件开发的设计原则,特别是面向对象编程,软件实体之间应该尽可能值暴露需要暴露的。

又称最少知道原则(Least know principles)。

里氏替换原则(LSP | Liskov Substitude Principle)

软件单元中子类应该可以替换所有的父类。 即,子类应该具有父类的所有功能。

接口隔离原则(Interface Segregation Principle)

不应该强迫客户程序依赖它们不用的方法。接口应该小而完备。

另外还有两个应该引起注意的点,虽然他们不是设计原则:

  • 优先使用对象组合,而不是继承
    • 类继承通常为了“白箱复用”,对象组合通常是“黑箱复用”
    • 继承在某种程度上破坏了封装性,子类父类耦合度高
    • 而对象组合则只要求被组合的对象具有良好定义的接口,耦合度低。
  • 封装变化点点
    • 使用封装来创建对象之间的分界层,让设计者可以在分界层的一侧修改,而不会对另一侧产生不良的影响,从而降低类层次的松耦合。

23种设计模式分类

在面向对象的设计模式中,可以按照目的分为三类:

  • 创建型
  • 结构型
  • 行为型

具体可见如下这脑图:

技术分享图片

设计模式-01-概述

原文:https://www.cnblogs.com/ylhong/p/13341906.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!