设计模式简介

要点概论:

1. 面向对象编程概述

2 . 面向对象编程的主要概念

3 .面向对象的设计原则

4. 设计模式的概念

5 .动态语言的设计模式

6. 模式的分类

1. 面向对象编程概述(跳过,或者给一个链接即可)

2. 面向对象编程的主要概念(待补充)

  2.1 封装

  2.2 多态

  2.3 继承

  2.4 抽象

  2.5 组合

3. 面向对象的设计原则

  3.1 开放/封闭原则

    开放/封闭原则规定,类或对象及其方法对于扩展来说,应该是开放的,但是对于修改来说,应该是封闭的。

    简单来说,这意味着当你开发软件应用的狮虎,一定确保以通用的方式来编写类或模块,以便每当需要扩展类或对象行为的时候不必修改类本身。相反,类的简单扩展将有助于建立新的行为。

    本设计原则的优点如下:

    ① 现有的类不会被修改因此退化的可能性较小

    ② 它还有助于保持以前代码的向后兼容性

  3.2 控制反转原则

    高层级的模块不应该依赖于低层级的模块,它们应该都依赖于抽象。细节应该依赖于抽象,而不是抽象依赖于细节。

    该原则建议任何两个模块都不应该以紧密方式相互依赖。事实上,基本模块和从属模块应当在它们之间提供一个抽象层来耦合。

    这个原则还建议,类的细节应该描绘抽象。在某些情况下,这种观念会反转,也就是实现细节本身决定了抽象,这种情况是应该避免的。

    

    控制反转原则的优点如下:

    ① 削弱了模块间的紧耦合,因此消除了系统中的复杂性/刚性。

    ② 由于在依赖模块之间有一个明确的抽象层(由钩子或参数提供),因此便于通过更好的方式处理模块之间的依赖关系。

  3.3 接口隔离原则

    接口隔离原则规定,客户端不应该依赖于它们不需要使用的接口。

    意思就是,软件开发人员应该仔细地处理接口。

    例如,一个  pizza接口不应该提供名为 add_chicken() 的方法。基于 Pizza 接口的 Veg Pizza 类不应该强制实现该方法。

    优点如下:

    ① 它强制开发人员编写 “瘦身型” 接口,并使方法与接口紧密相关

    ② 防止向接口中随机添加方法

  3.4 单一职责原则

    单一职责的含义是:类的职责单一,引起类变化的原因单一。

    这个原则是说,当我们开发类时,它应该为特定的功能服务。

    如果一个类实现了两个功能,那么最好将它们分开。也就是说,功能才是改变的理由。

    例如,一个类可以因为所需行为的变化而进行修改,但是如果一个类由于两个因素(基本上时两个功能的改变)而改变,那么该类就应该进行相应的分割。

    优点如下:

    ① 每当一个功能发生变化时,除了特定的类需要改变外,其他类无需变动。

    ② 此外,如果一个类由多种功能,那么依赖它的类必定会由于多种原因而经历多次修改,这是应该避免的

  3.5 替换原则

    替换原则规定,派生类必须能够完全取代基类。

    意思是说,当应用程序开发人员编写派生类时,该原则的含义就是他们应该扩展基类。此外,它还建议派生类应该尽可能对基类封闭,以至于派生类本身可以替换基类,而无需修改任何代码。

4. 设计模式的概念

  设计模式就是结局特定问题的解决方案。主要特点如下:

  ① 它们是语言无关的,可以用多种语言实现

  ② 它们是动态的,随时会有新的模式引入

  ③ 它们可以进行定制,因此对开发人员非常有用

  4.1 设计模式的优点

    ① 它们可以在多个项目中重复使用

    ② 问题可以在架构级别得到结局

    ③ 它们都经过了时间的验证和良好的证明,是开发人员和架构师的宝贵经验

    ④ 它们具有可靠性和依赖性

  4.2 设计模式的分类

    不是每一段代码或每一种设计都可以叫作设计模式。

    例如,解决一个问题的变成构造或数据结构就不能被称为模式。下面通过一些简单的方式来理解这些术语:

    ① 代码段:用某种语言编写的一段具有特定用途的代码。例如,它可以是 Python 中的 DB 连接代码

    ② 设计:用来解决某个特定问题的优秀解决方案

    ③ 标准:这是一种解决某类问题的方法,它非常通用,并且适用于当前的情况

    ④ 模式:这是一个经过时间考验的,高效,可扩展的解决方案,能够解决一类已知问题

  

  4.3 上下文——设计模式的适用性

    为了有效地使用设计模式,应用程序开发人员必须了解设计模式所适用的上下文。主要分为以下几种类型:

    ① 参与者:它们是在设计模式中用到的类。类可以在模式中扮演不同的角色,以完成多个目标

    ② 非功能需求:诸如内存优化,可用性和性能等需求都属于此类型。由于这些因素影响整个软件解决方案,因此至关重要

    ③ 权衡:并非所有的设计模式都适合于应用程序开发,因此需要权衡。这些是在应用程序中使用设计模式时所做的决策

    ④ 结果:如果上下文不合适,设计模式可能对代码的其他部分产生负面影响。开发人员应该了解设计模式的结果和用途

5. 动态语言的设计模式

  以 Python 举例, Python的动态特性如下:

  ① 类型或类是运行时对象

  ② 变量可以根据赋值来确定类型,并且类型可以在运行时改变

  ③ 动态语言在类限制方面具有更大的灵活性

    例如,在 Python 中,多态性是该语言所固有的,并没有诸如 private 和 protected 之类的关键字,因此默认情况下一切都是公共的

  ④ 可以使用动态语言轻松实现设计模式的用例

6. 模式的分类

  模式的分类主要基于对象的创建方式,软件应用程序中类和对象的构造方式,同时还涉及对象之间的交互方式。

  主要分为三大类:

  1)创建型模式

    ① 它们的运行机制基于对象的创建方式

    ② 它们将对象创建的细节隔离开来

    ③ 代码与所创建的对象的类型无关

    PS:单例模式是创建型模式的一个例子

  2)结构型模式

    ① 它们致力于设计出能够通过组合获得更强大功能的对象和类的结构

    ② 重点是简化结构并识别类和对象之间的关系

    ③ 它们主要关注类的继承和组合

    PS:适配器模式是结构型模式的一个例子

  3)行为型模式

    ① 他么关注对象之间的交互以及对象的响应性

    ② 对象应该能够交互,同时仍然保持松散耦合

    PS:观察者模式是行为型模式的一个例子

原文地址:https://www.cnblogs.com/HZY258/p/8459409.html