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