设计模式概述:

设计模式:是指在软件开发中,经过验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案。

具有如下特点:

1、设计模式是解决某些问题的办法

2、设计模式不是凭空想象出来的,是经验的积累和总结

3、设计模式并不是一成不变的,而是在不断发展中

4、设计模式并不是软件行业独有的,各行各业都有自己的设计模式

设计模式的组成:

模式名称:就是每个设计模式的名字,好记忆,也好交流

环境和问题:描述在什么场景下,出现什么样的特定问题

解决方案:描述如何解决这个问题

效果:描述模式应用的效果,以及可能带来的问题,或者使用中需要权衡的问题

设计模式的分类:

创建型模式:抽象了对象实例化过程,用来帮组创建对象的实例

结构型模式:描述如何组合类和对象以获得更大的结构

行为型模式:描述算法和对象间职责的分配

为什么要学习设计模式?

设计模式已经成为软件开发人员的“标准词汇”

学习设计模式是个人技术能力提高的捷径

不用重复发明轮子

学习设计模式的三个层次

1、基本入门级

要求能够正确理解和掌握每个设计模式的基本知识,能够识别在什么场景下、出现了什么样的问题、采用何种方案来解决它,并能够在实际的程序设计和开发中套用相应的设计模式

2、基本掌握级

    除了具备基本入门级的要求外,还要求能够结合实际应用场景,对设计模式进行变形使用(万变不离其宗,只有把握住本质,才能够保证正确变形使用而不是误用)

3、深入理解和掌握级

除了具备基本掌握级的要求外,更主要的是在较复杂的应用中,当解决某个问题的时候,很可能不是单一应用某一个设计模式,而是综合应用很多设计模式。更复杂的是除了考虑这些设计模式外,还可能需要考虑系统整体的体系结构、实际功能的实现、与已有功能的结合等。这就要求在应用设计模式的时候,不拘泥设计模式本身,而是从思想和方法的层面进行应用。

如何学习设计模式

1、首先要调整好心态,不要指望一蹴而就,不可浮躁

2、学习设计模式第一步:准确理解每个设计模式的功能,基本结构,标准实现,了解适合使用它的场景以及使用的效果

3、学习设计模式第二步:实际开发中,尝试着使用这些设计模式,并反复思考和总结是否使用得当,是否需要做一些变化

4、学习设计模式第三步:再回头去看设计模式的理论,有了实际的模式应用经验再看设计模式,会有不同的感悟,一边看一边结合着应用经验来思考

5、学习设计模式第四步:多次重复学习设计模式第二步第三步

简言之:理论指导实践,实践反过来加深对理论的理解

23种设计模式

1、简单工厂(创建型(不属于GoF中23中设计模式中的))

提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口,抽象类,也可以是具体的类

2、外观模式(结构型)

为子系统中的一组接口提供一个一致的界面,外观模式(Facade)定义了一个高层接口,这个接口使得这一子系统更加容易使用

3、适配器模式(结构型)

将一个类的接口转换成客户客户希望的另一个接口。适配器模式使得原本由于接口不能兼容而不能在一起工作的那些类可以在一起工作

4、单例模式(创建型)

保证一个类仅有一个实例,并提供一个访问它的全局访问点

5、工厂方法模式(创建型)

定义个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method 使一个类的实例化延迟到其子类

6、抽象工厂方法(创建型)

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类

7、生成器模式(创建型)

将一个复杂对象的构建与它的表示分离,使得同样的创建过程可以创建不同的表示

8、原型模式(创建型)

用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象

9、中介者模式(行为型)

用一个中介对象来封装一系列对象的交互。中介者使得各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互

10、代理模式(结构型)

为其他对象提供一种代理以控制对这个对象的访问

11、观察者模式(行为型)

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所依赖于它的对象都得到通知并被自动更新

12、命令模式(行为型)

将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作

13、迭代器模式(行为型)

提供一种方法顺序访问一个聚合对象中的各个元素,而又不需暴露该对象的内部表示

14、组合模式(结构型)

将对象组合成树形结构以表示“部分——整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性

15、模板方法模式(行为型)

定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤

16、策略模式(行为型)

定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化

17、状态模式(行为型)

允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类

18、备忘录模式(行为型)

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样,以后就可将该对象恢复到原先保存的状态

19、享元模式(结构型)

运用共享技术有效地支持大量细粒度的对象

20、解释器模式(行为型)

定义一个语音,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子

21、装饰模式(结构型)

动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活

22、职责链模式(行为型)

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止

23、桥接模式(结构型)

将抽象部分与它的实现部分分离,使他们都可以独立地变化

24、访问者模式(行为型)

表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作

软件设计模式概述(摘自《研磨设计模式》)相关推荐

  1. 第 4 章 设计模式概述

    第 4 章 设计模式概述 1.设计模式的层次 第 1 层: 刚开始学编程不久, 听说过什么是设计模式 第 2 层: 有很长时间的编程经验, 自己写了很多代码, 其中用到了设计模式, 但是自己却不知道 ...

  2. 【设计模式】第1章·设计模式概述

    第一章·设计模式概述 一.设计模式的定义与分类 1.设计模式的定义 设计模式是一套被反复使用的,多数人知晓的.经过分类编目.代码设计经验的总结,使用设计模式为了可重用代码,让代码更容易被其他人理解并且 ...

  3. 23种设计模式——软件设计模式概述

    文章目录 23种设计模式--软件设计模式概述 1.软件设计模式的产生背景 2.软件设计模式的概念与意义 2.1. 软件设计模式的概念 2.2. 学习设计模式的意义 3.软件设计模式的基本要素 4.23 ...

  4. 【设计模式学习01】设计模式概述,UML图,软件设计原则

    文章目录 1. 设计模式概述 1.1 软件设计模式的产生背景 1.2 软件设计模式的概念 1.3 学习设计模式的必要性 1.4 设计模式分类 2. UML图 2.1 类图概述 2.2 类图的作用 2. ...

  5. 设计模式杂谈(一)——设计模式概述

    文章目录 1 设计模式概述 1.1 软件设计模式的产生背景 1.2 软件设计模式的概念 1.3 设计模式的必要性 1.4 设计模式分类 1 设计模式概述 1.1 软件设计模式的产生背景 设计模式最初并 ...

  6. java观察者模式本质_6.[研磨设计模式笔记]观察者模式

    1.定义 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新. 2.解决问题 --订阅报纸 看起来订阅者是直接根有据打交道,但实际上,订阅者的订阅数据 ...

  7. 《设计模式详解》设计模式概述、UML

    <设计模式详解> 1.设计模式概述 1.1 软件设计模式的产生背景 1.2 软件设计模式的概念 1.3 学习设计模式的必要性 1.4 设计模式分类 2.UML 2.1 类图概述 2.2 类 ...

  8. 从零开始学习Java设计模式 | 设计模式入门篇:设计模式概述

    在上一讲中,明确了设计模式这门课所要学习的内容之后,接下来,我们就得开始正式步入设计模式这门课的学习中了,当然,我也祝大家能在设计模式这门课程中能够学到很多东西,也不枉我这一片苦心了! 软件设计模式的 ...

  9. 设计模式概述以及 23种设计模式的介绍

    文章目录 设计模式概述(Design pattern): 设计模式3大类 设计模式的七大原则 设计模式概述(Design pattern): 设计模式:代表了最佳的实践,通常被有经验的面向对象的软件开 ...

  10. 设计模式概述 以及 23种设计模式的介绍

    设计模式概述(Design pattern): 设计模式:代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案.这些解决方案是众 ...

最新文章

  1. SQL2005学习(九),将数据库备份到网络共享文件夹中
  2. 柏堰工业园有做机器人的吗_合肥柏堰科技园推进机器人应用 促产业转型升级...
  3. C语言关键字 - 铁布衫:const
  4. python合法标识符_python_判断标识符的合法性
  5. myelicpes怎么导入PHP项目,利用PHP执行SQL文件,将SQL文件导入到数据库
  6. Linux-DNS服务-BIND配置
  7. oracle创建目录并赋权,Oracle 添加用户并赋权,修改密码,解锁,删除用户的方法...
  8. Servlet入门1
  9. 【Java 基础】枚举、包装类、Math、Radnom、UUID、格式化、DecimalFormat、高精度计算(BigDecimal)
  10. Matlab中的函数句柄@
  11. 删除mysql数据库_安装/删除MySQL数据库
  12. iOS build 编译错误 Failed to emit precompiled header for bridging header
  13. 机器学习OneR算法
  14. 公积金总结(一)--公积金概念
  15. PLSQL:导出表结构、导出整个表、导出表部分数据、复制表、导入表
  16. canvas 花蕊绽放
  17. 计算n阶乘中尾部零的个数
  18. HTML+css 会旋转的可乐瓶子
  19. R语言github软件的两种安装方式
  20. 31 SpringBoot多环境的切换(生产环境、开发环境、测试环境)

热门文章

  1. 学习笔记:OMP算法(Spatially Sparse Precoding in Millimeter wave MIMO Systems)
  2. 如何用c语言编写控制台小游戏,使用c语言写WIN32控制台小游戏 贪吃蛇
  3. CFS三层靶机搭建及其内网渗透
  4. 三菱梯形图转换c语言软件,三菱PLC编程软件的梯形图程序的生成与编辑
  5. WPF-StackPanel面板
  6. linux wireless子系统,Linux Wireless子系统初始化
  7. 最新手机号段归属地数据库 (2019年6月版) 430826行
  8. 【T+】余额表联查明细账,提示未将对象引用设置到对象的实例;参数格式错误,solutionID不能为空。
  9. linux rs232驱动程序,Ubuntu安装USB to RS232驱动
  10. solidworks迈迪设计宝_做非标机械设计必备的辅助工具,如米思米、怡合达、英科宇等...