设计模式-01-设计模式简介及分类
本文为转载文章,转自菜鸟教程:设计模式
设计模式简介
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。
什么是 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)。他们所提出的设计模式主要是基于以下的面向对象设计原则。
- 对接口编程而不是对实现编程。
- 优先使用对象组合而不是继承。
设计模式的使用
设计模式在软件开发中的两个主要用途。
开发人员的共同平台
设计模式提供了一个标准的术语系统,且具体到特定的情景。例如,单例设计模式意味着使用单个对象,这样所有熟悉单例设计模式的开发人员都能使用单个对象,并且可以通过这种方式告诉对方,程序使用的是单例模式。
最佳的实践
设计模式已经经历了很长一段时间的发展,它们提供了软件开发过程中面临的一般问题的最佳解决方案。学习这些模式有助于经验不足的开发人员通过一种简单快捷的方式来学习软件设计。
设计模式的类型
根据设计模式的参考书 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素) 中所提到的,总共有 23 种设计模式。这些模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)。当然,我们还会讨论另一类设计模式:J2EE 设计模式。
序号 | 模式 & 描述 | 包括 |
---|---|---|
1 |
创建型模式
这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 |
|
2 |
结构型模式
这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。 |
|
3 |
行为型模式
这些设计模式特别关注对象之间的通信。 |
|
4 |
J2EE 模式
这些设计模式特别关注表示层。这些模式是由 Sun Java Center 鉴定的。 |
|
下面用一个图片来整体描述一下设计模式之间的关系:
设计模式的六大原则
1、开闭原则(Open Close Principle)
开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。
2、里氏代换原则(Liskov Substitution Principle)
里氏代换原则是面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
3、依赖倒转原则(Dependence Inversion Principle)
这个原则是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。
4、接口隔离原则(Interface Segregation Principle)
这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度。由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。
5、迪米特法则,又称最少知道原则(Demeter Principle)
最少知道原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
6、合成复用原则(Composite Reuse Principle)
合成复用原则是指:尽量使用合成/聚合的方式,而不是使用继承。
设计模式-01-设计模式简介及分类相关推荐
- 设计模式之简介及其分类
一,设计模式概述 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结. 使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证代码可靠性 ...
- 深入浅出设计模式之设计模式简介
一.什么是设计模式(详见设计模式概念和七大原则) 在GoF(Gang of Four)的书籍<Design Patterns - Elements of Reusable Object-Orie ...
- 决战设计模式之巅01——设计模式导论
"学会享受寂寞,那会让你学会思考自我." --加西亚·马尔克斯 一.设计模式概念与历史 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码 ...
- 【设计模式】设计模式总结 ( 七大设计原则 | 创建型模式 | 结构型模式 | 行为型模式 ) ★★★
文章目录 一.七大设计原则 1.开闭原则 2.依赖倒置原则 3.单一职责原则 4.接口隔离原则 5.迪米特原则 6.里氏替换原则 7.合成复用原则 二.创建型模式 0.简单工厂模式 ( 不属于 GOF ...
- Java设计模式——工厂设计模式
工厂设计模式 一.简介 都不知道简介要写什么,工厂模式嘛,就是工厂嘛,生产东西的嘛-- 在Java里面就是用来帮助我们生产对象的咯-- 主要作用嘛,大概就是将创建和使用对象拆分减低耦合度吧. 二.分类 ...
- 设计模式一の设计模式详解
一.设计模式定义 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结. 使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证代码可靠性 ...
- 【设计模式】设计模式
概述 设计模式介绍 设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验,模式不是代码,而是某类问题的通 用解决方案,设计模式(Design pattern)代表了最佳的实践.这些解决方案 ...
- 23种设计模式——软件设计模式概述
文章目录 23种设计模式--软件设计模式概述 1.软件设计模式的产生背景 2.软件设计模式的概念与意义 2.1. 软件设计模式的概念 2.2. 学习设计模式的意义 3.软件设计模式的基本要素 4.23 ...
- java二十三种设计模式——工厂设计模式
java设计模式的分类 在java中,设计模式有三十三种之多,分为三大类: 创建性模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构性模式,共七种:适配器模式.装饰器模式 ...
- 设计模式(1)—什么是设计模式?设计模式的六大原则是什么?
目录 1.什么设计模式 2.设计模式的发展 3.设计模式6大原则 3.1 开闭原则 3.2 里氏转换原则 3.3 依赖倒转原则 3.4 接口隔离原则 3.5 合成/聚合复用原则 3.6 迪米特原 ...
最新文章
- 36.Linux软件管理--YUM工具
- 计算laws的matlab代码
- Docker最全教程之使用.NET Core推送钉钉消息(二十)
- c# npoi 公式不计算_玉米扣量因素:水分、杂质、不完善粒、生霉粒,检测方法及计算公式...
- php wp foo,WordPress 常用函数 / wpautop
- 新版php卡盟排行榜网站源码
- 计算机一寸照编辑教程,超简单的一寸照制作及排版教程,再也不花冤枉钱!
- deepface:最先进轻量级人脸识别和人脸属性分析框架讲解
- 当下主流的数据库及其特点
- 应用软件与系统不兼容的解决办法,仅供参考
- byte 16进制 2进制理解
- 程序员被人喜欢的13点原因
- excel怎么设置自动计算_excel表格设置自动计算的方法步骤(2)
- 小米智能插座、小米温湿度计2、涂鸦灯泡 接入Home Assistant
- 1.12 Illustrator视图的打印拼贴 [Illustrator CC教程]
- UIColor延伸:判断两个颜色是否相等
- 江苏海洋大学计算机考试系统,江苏海洋大学教务管理系统入口https://jwc.hhit.edu.cn/...
- MySQL的下载、安装和配置
- 几种客户开发的方法及分析!
- 众美集团深耕服务定制 职住合一促区域协同发展
热门文章
- threejs加载模型挤压变形_浙大《Nature》子刊新思路:晶界调控金属纳米结构循环变形行为!...
- java如何比较两个对象_Java如何比较两个对象
- C#:访问web.config中的常量
- opencv_找cv::Mat中的最大值和最小值
- CVPR 2020-FaceShifter:能够应对脸部遮挡的高保真换脸方法
- CVPR2022 Oral | CosFace、ArcFace的大统一升级,AdaFace解决低质量图像人脸识
- 数据分析------数据处理(2)及 AutoML 学习
- Windows 10 优化
- 说一说javascript跨域和jsonp
- 作业 3 应用分支与循环结构解决问题