前言
本博客仅做学习笔记,如有侵权,联系后即刻更改
科普:
概述
定义
- 模式
模式是在特定环境下解决重复出现问题的成功和有效的解决方案
- 设计模式
- 一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结
- 设计模式是在特定环境下为解决某一通用软件设计问题提供的一套定制的解决方案,该方案描述了对象和类之间的相互作用
- 设计模式的关键要素
模式名称 (Pattern Name)
问题 (Problem)
解决方案 (Solution)
效果 (Consequences)
分类
- 根据目的(模式是用来做什么的)可分为
- 创建型模式主要用于创建对象
- 结构型模式主要用于处理类或对象的组合
- 行为型模式主要用于描述类或对象如何交互和怎样分配职责
- 根据范围
即模式主要是处理类之间的关系还是处理对象之间的关系
- 类模式处理类和子类之间的关系,这些关系通过继承建立,在编译时刻就被确定下来,是一种静态关系
- 对象模式处理对象间的关系,这些关系在运行时变化,更具动态性
相关概念
- 接口的作用:拓展
- 面对对象三大特性:封装、继承、多态
设计模式的基本模式
- 前提条件(context) -> 问题描述(theme/problem) -> 解法(solution)
- 大三律 (Rule of Three)
只有经过3个以上不同类型(或不同领域)的系统的校验,一个解决方案才能从候选模式升格为模式
优点
- 融合了众多专家的经验,并以一种标准的形式供广大开发人员所用
- 提供了一套通用的设计词汇和一种通用的语言,以方便开发人员之间进行沟通和交流,使得设计方案更加通俗易懂
- 让人们可以更加简单方便地复用成功的设计和体系结构
- 使得设计方案更加灵活,且易于修改
- 将提高软件系统的开发效率和软件质量,且在一定程度上节约设计成本
- 有助于初学者更深入地理解面向对象思想,方便阅读和学习现有类库与其他系统中的源代码,还可以提高软件的设计水平和代码质量
面向对象设计原则
- 指导性原则,不是强制性的
目标
- 可维护性
确保系统易于扩展和修改
具有良好的可维护性- 可复用性
实现设计方案或者源代码的复用
七个常用面对对象设计原则
- 单一职责原则
用于控制类的粒度大小:高内聚、低耦合
- 定义:SRP(Single Resposibility Principle)
从一个对象一个只包含单一的职责,并且该职责被完整地封装在一个类中
或者换个说法:就一个类而言,仅有一个引起它变化的原因
- 开闭原则
关键:抽象化
- 指软件实体应尽量在不修改源代码的情况下进行扩展
- 定义:OCP(Open-Closed Principle)
软件实体应当对扩展开放,对修改关闭
- 里氏代换原则
前提:类型转换是向上转型是安全的
- 将父类设计为抽象类或者接口,让子类继承父类或实现父接口
并实现在父类中声明的方法,在运行时子类实例替换父类实例- 定义:LSP(Liskov Substitution Principle)
所有引用基类的地方必须能透明地使用其子类的对象
- 依赖倒转原则
开闭原则是目的,里氏代换原则是基础,依赖调转是手段
- 实际项目中,只需要对抽象层进行扩展,并修改配置文件
- 实现方式:依赖注入
构造注入:通过构造函数传入具体类的对象
接口注入:通过Setter方法传入具体类的对象
接口注入:接口声明的业务方法传入具体类的对象- 定义:DIP(Dependece Inversion Principle)
模块和细节都应该依赖抽象,针对接口编程,不针对实现编程
- 接口隔离原则
把接口当成一个类型所提供的所有方法特征的集合时,可称为角色隔离原则
- 狭义的当成特定语言的接口,使接口的职责单一,可称为定制服务
- 定义:ISP(Interface Segregation Principle)
客户端不应该依赖不需要的接口
- 合成复用原则
- 定义:CRP(Composite Reuse Principle)
优先使用关联,而不是通过继承来达到复用的目的
- 迪米特法则、
降低系统的耦合度,使类和类之间松散的耦合关系
- 定义:LoD(law of Demeter)
最少知识原则
总结
小小励志
有些事你现在不做,一辈子都不会做了。
如果你想做一件事,全世界都会为你让路。
《搭车去柏林》