一. 软件六大设计原则(SOLID)

  • Single Responsibility Principle:单一职责原则
  • Open Closed Principle:开闭原则
  • Liskov Substitution Principle:里氏替换原则
  • Law of Demeter:迪米特法则
  • Interface Segregation Principle:接口隔离原则
  • Dependence Inversion Principle:依赖倒置原则

把这六个原则的首字母联合起来(两个 L 算做一个)就是 SOLID (solid,稳定的),其代表的含义就是这六个原则结合使用的好处:建立稳定、灵活、健壮的设计。下面我们来分别看一下这六大设计原则。

1.1 单一职责原则(Single Responsibility Principle

一个类应该只有一个发生变化的原因

There should never be more than one reason for a class to change.

1.2 开闭原则(Open Closed Principle)

一个软件实体,如类、模块和函数应该对扩展开放,对修改关闭

Software entities like classes, modules and functions should be open for extension but closed for modification

1.3 里氏替换原则(Liskov Substitution Principle)

所有引用基类的地方必须能透明地使用其子类的对象

Functions that use use pointers or references to base classes must be able to use objects of derived classes without knowing it.

1.4 迪米特法则(Law of Demeter)

只与你的直接朋友交谈,不跟“陌生人”说话

Talk only to your immediate friends and not to strangers

其含义是:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。

1.5 接口隔离原则(Interface Segregation Principle)

  • 客户端不应该依赖它不需要的接口。
  • 类间的依赖关系应该建立在最小的接口上。

Clients should not be forced to depend upon interfaces that they don`t use.
The dependency of one class to another one should depend on the smallest possible.

注:该原则中的接口,是一个泛泛而言的接口,不仅仅指具体的接口,还包括其中的抽象类。

1.6 依赖倒置原则(Dependence Inversion Principle)

  • 上层模块不应该依赖底层模块,它们都应该依赖于抽象。
  • 抽象不应该依赖于细节,细节应该依赖于抽象。

High level modules should not depend upon low level modules. Both should depend upon abstractions.
Abstractions should not depend upon details. Details should depend upon abstractions.

二. 软件设计23种模式

2.1 GOF(四人帮,全拼 Gang of Four)

在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素) 的书,该书首次提到了软件开发中设计模式的概念。

四位作者合称 GOF(四人帮,全拼 Gang of Four)。他们所提出的设计模式主要是基于以下的面向对象设计原则。

  • 面向接口编程而不是面向实现编程。
  • 抽象不应该依赖于具体,具体应该依赖于抽象。
  • 优先使用对象组合而不是继承。

2.3 设计模式的类型

在书中所提到的,总共有 23 种设计模式。这些模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)。

创建型模式

这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。

  • 单例模式(Singleton Pattern)
  • 工厂模式(Factory Pattern)
  • 抽象工厂模式(Abstract Factory Pattern)
  • 建造者模式(Builder Pattern)
  • 原型模式(Prototype Pattern)

结构型模式

这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。

  • 适配器模式(Adapter Pattern)
  • 桥接模式(Bridge Pattern)
  • 组合模式(Composite Pattern)
  • 装饰器模式(Decorator Pattern)
  • 外观模式(Facade Pattern)
  • 享元模式(Flyweight Pattern)
  • 代理模式(Proxy Pattern)

行为型模式

这些设计模式特别关注对象之间的通信。

  • 责任链模式(Chain of Responsibility Pattern)
  • 命令模式(Command Pattern)
  • 解释器模式(Interpreter Pattern)
  • 迭代器模式(Iterator Pattern)
  • 中介者模式(Mediator Pattern)
  • 备忘录模式(Memento Pattern)
  • 观察者模式(Observer Pattern)
  • 状态模式(State Pattern)
  • 策略模式(Strategy Pattern)
  • 模板模式(Template Pattern)
  • 访问者模式(Visitor Pattern)

参考:
https://www.runoob.com/design-pattern/design-pattern-intro.html
https://www.jianshu.com/p/3268264ae581

软件设计原则及设计模式相关推荐

  1. 软件设计模式——软件设计原则

    摘要 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.无数工程师实践的代码设计经验的总结,它是面向对象思想的高度提炼和模板化,使用设计模式是为了让代码具有更高的可重用性,更好的 ...

  2. 软件设计原则(一)开闭原则(Open-Closed Principle, OCP)

    狭义理解:对扩展开发,对修改封闭 在学习设计模式之前,应该先对软件设计原则有一定的了解,设计模式在一定程度上是迎合软件设计原则而产生的,脱离了软件设计原则,设计模式是没有意义的. 开-闭原则(Open ...

  3. 软件设计原则 —— 迪米特原则和合成复用原则

    迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽可能少的 ...

  4. C#软件设计——小话设计模式原则之:依赖倒置原则DIP

    前言:很久之前就想动笔总结下关于软件设计的一些原则,或者说是设计模式的一些原则,奈何被各种bootstrap组件所吸引,一直抽不开身.群里面有朋友问博主是否改行做前端了,呵呵,其实博主是想做" ...

  5. C#软件设计——小话设计模式原则之:接口隔离原则ISP

    前言:有朋友问我,设计模式原则这些东西在园子里都讨论烂了,一搜一大把的资料,还花这么大力气去整这个干嘛.博主不得不承认,园子里确实很多这方面的文章,并且不乏出色的博文.博主的想法是,既然要完善知识体系 ...

  6. 《设计模式详解》软件设计原则

    <设计模式详解> 3.软件设计原则 3.1 开闭原则 示例 3.2 里式代换原则 反例 改进反例 3.3 依赖倒转原则 反例 改进反例 3.4 接口隔离原则 反例 改进反例 3.5 迪米特 ...

  7. java 设计模式:软件设计原则、面向对象理论、23 种设计模式

    文章目录 软件设计原则 1.单一职责原则(Single Responsibility Principle) 2.开闭原则(Open Closed Principle) 3.里氏代换原则(Liskov ...

  8. 设计模式01 UML图,软件设计原则,创建型模式

    概述 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中. 1995年,由 Erich Gamma.Richard Helm.Ralph Johnson 和 Joh ...

  9. 从零开始学习Java设计模式 | 软件设计原则篇:开闭原则

    从本讲开始,咱们就要开始学习第一章中的第三部分内容,即软件设计原则了. 在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件 ...

最新文章

  1. tomcat9配置https-pfx
  2. html退出登录_[实战小剧场servletamp;jsp] 用户登录及退出功能实现
  3. linux卸载netbeans,如何清除NetBeans中的缓存
  4. Ceph 存储集群7-故障排除
  5. 计算机游戏50关,YELLOW游戏全50关攻略
  6. Zookeeper面试题锦集
  7. STM8 ADC转换模式-------单次模式
  8. matlab的HDLcoder,MATLAB发布新产品模块——Simulink HDL Coder_虚拟与仿真
  9. 利用ajax防止session过期,AJAX实现防止Session过期
  10. kubernets 集群和本地环境联调环境打通工具kt-connect
  11. dimp是什么意思_单目标追踪论文阅读系列(八)——《DIMP(ICCV2019)》
  12. 7种提高工作效率的Vim操作
  13. 微信小程序万里目_微信小程序“注册”你不知道的秘密
  14. uniapp、vue实现滑动拼图验证码
  15. python海龟画图代码大全_【程序源代码】python 海龟画图
  16. PAT_甲级 简单模拟
  17. Alpha阶段敏捷冲刺⑦
  18. apache common base64编码
  19. 华为2017暑期实习生面试体会
  20. keytool 错误:java.io.IOException:Incorrect AVA format

热门文章

  1. 看透设计模式-行为型模式
  2. 为什么说Pravega是流处理统一批处理的最后一块拼图?
  3. 高可用之KeepAlived(2):keepalived+lvs
  4. 转:怎样开始学习php代码审计?
  5. 《Design patterns》读书笔记
  6. Mysql 获取年级每个班前十学生的信息
  7. 打造数据中心的软实力
  8. Server Core 的部署与管理
  9. HDU 4547 CD操作
  10. 华为HCIE7-中间系统到中间系统的路由泄露、防环、认证和优化机制