zoukankan      html  css  js  c++  java
  • 设计模式简介

    要点概论:

    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:观察者模式是行为型模式的一个例子

  • 相关阅读:
    Maven
    Maven
    Maven
    Maven
    Maven
    Maven
    Maven
    Python
    Maven
    include和require的区别
  • 原文地址:https://www.cnblogs.com/HZY258/p/8459409.html
Copyright © 2011-2022 走看看