设计模式 —– 设计模式总结


设计模式系列源码: https://github.com/liloqian/DesiginModeDemo

1.什么是设计模式

模式是指在某情形下,针对某问题的某种解决方案。
情景     应用某个模式的情况,这是不断出现的情况
问题     在某情景下达到的目标,也可以是某情景下的约束
解决方案     一个通用的设计,用来解决约束,达到目标

2.模式的分类

上述中的橙色部分是head first中详细讲到的,灰色的没有详细讲解的

  • 创建型模式,这类模式都提供一个方法,将客户从所需要实例化的对象中解耦
  • 结构性模式,让你可以把类或对象组合到更大的结构中去。
  • 行为性模式,涉及到类和对象如何交互及分配职责

3.模式的简介

1.——————-策略模式——————-
      定义算法族,分别封装起来,让他们之间可以相互替换,此设计模式让算法的变化独立与使用算法的客户;通俗的说话就是,准备一组算法,并将每一个算法封装起来,使得它们可以互换
      使用场景,在集合的排序中,有的需要从大到小排序,有的需要从小到到大排序,我们不能因为这一点不同,写两个不同的算法,我们可以定义一个排序的接口,接口只有一个方法返回boolean,我们在排序算法中使用接口的排序方法,在不同的情况下实现不同的类来继承排序接口通过返回不同的结果进行升序或者降序

2.——————-观察者模式——————-
      在对象之间定义一对多的依赖,当一个对象状态改变时,依赖他的对象就会收到通知
      使用场景,java swing中的组件监听事件,当我们点击按钮时会调用我们注册的回调函数;还有Rxjava等等

3.——————-装饰者模式——————-
      动态的将责任附加到对象上,想要扩展功能,装饰者提供了一种有别于继承的选择方式
      使用场景 ,javaJDK io的实现

4.——————-工厂模式——————-
      定义了一个创建对象的接口,由子类决定要实例化的类是哪一个。工厂方法把实例化推迟到子类

5.——————-抽象工厂模式——————-
      提供了一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类

6.——————-单例模式——————-
      确保一个类只有一个实例额,并提供一个安全的全局访问点
      使用场景 , javaJDK Calendar类的实现

7.——————-命令模式——————-
      将请求封装成对象,以便使用不同的请求,队列或日志来参数化其他对象,命令模式也支持可撤销的操作

8.——————-适配器模式——————-
      将一个接口转化为另外一个接口,以符合客户的期望。实现让原本接口不兼容的类可以合作无间。

9.——————-外观模式——————-
      提供了一个统一的接口,用来访问子系统中的一大群接口。外观模式定义了一个高层接口,让子系统更容易使用

10.——————-模板方法模式——————-
      在一个方法中定义一个算法的骨架,而将一些具体的步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤
      使用场景,ArraayList集合是可以进行排序的,但是存储的对象是要实现了Comparable接口中的compareTo()方法

11.——————-状态模式——————-
      允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类

12.——————-代理模式(静态)——————-
      为另一个对象提供一个替身或占位符以控制对这个对象的访问

13.——————-3复合模式——————-
      在一个解决方案中结合两个或多个模式
      使用场景 , MVC模型用到了观察者模式,策略模式,组合模式。

14——————-迭代器模式——————-
      提供一种方法顺序访问一个集合对象中的各个元素,而又不暴露其内部的表示
      使用场景 , javaJDK中的iterator
15——————-组合模式/部分整体模式——————-
      为了忽略单个对象和对象集合的区别,统一使用组合结构中的所以对象(包括集合和对象)
      使用场景 , UI中使用的很多,java Swing 和 Android的树形控件

4.14中headfirst设计模式中常用模式的作用

1.策略模式 ,封装可以互换的行为,并使用委托来决定要使用哪一个
2.观察者模式 , 让对象可以在状态被改变时被通知
3.装饰者模式 ,包装一个对象,以提供新的行为
4.工厂模式 , 由子类确定要创建的具体类是哪一个
5.抽象工厂 , 运行客户创建对象的家族,而无需指定他们的具体类
6.单例模式 , 确保有且只有一个对象被创建
7.命令模式 , 封装请求称为对象
8.适配器模式 , 封装对象,并提供不同的接口
9.外观模式,简化一群类的接口
10.模板方法模式 , 由子类决定如何实现一个算法中的步骤
11.状态模式 , 封装了基本状态的行为,并使用委托在行为之间进行切换
12.代理模式 , 包装对象,以控制对此对象的访问
13迭代器模式 , 在对象的集合之中游走而不暴露集合的实现
14.组合模式 , 客户使用一直的方式处理和单个对象

设计模式 ----- 设计模式总结相关推荐

  1. 图解设计模式-设计模式七大原则

    Java设计模式 设计模式七大原则 设计模式的目的 编写软件过程中,程序员面临来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战,设计模式是为了让 **程序(软件)**具有更好的 ...

  2. Java设计模式---设计模式概述及七大原则

    网课指路:尚硅谷Java设计模式(图解+框架源码剖析)_哔哩哔哩_bilibili 设计模式介绍         1) 设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验, 模式不是代码 ...

  3. 正确的姿势学习设计模式,设计模式必知必会 --- 面试, 提升篇

    目录 引言--- 为何需要设计模式? 学习设计模式不如掌握设计原则 (根据原则慢慢重构自己的设计模式) 依赖倒置原则 开放封闭原则 面向接口编程 封装变化点(核心原则) 抽象稳定点,扩展变化点 单一职 ...

  4. JavaScript 设计模式----设计模式初识

    JavaScript 设计模式----设计模式初识 1. 从设计到模式 2. 设计模式简介 2.1 设计模式类型 2.2 创建型 2.3 结构型 2.4 行为型 3. 设计原则面试题 3.1 面试题一 ...

  5. 设计模式——设计模式之禅day2

    接口隔离原则 接口分为两种: ● 实例接口( Object Interface) , 在Java中声明一个类, 然后用new关键字产生一个实例, 它是对一个类型的事物的描述, 这是一种接口. 比如你定 ...

  6. [设计模式]设计模式之禅关于接口隔离原则

    在讲接口隔离原则之前,先明确一下我们的主角--接口.接口分为两种: ● 实例接口(Object Interface),在Java中声明一个类,然后用new关键字产生一个实例,它是对一个类型的事物的描述 ...

  7. 设计模式:设计模式七大原则

    单一职责原则 对类来说,即一个类应该只负责一项职责.如A类负责两个不同的职责:职责1,职责2.当职责1需求变更而改变A时,可能造成职责2执行错误.所以需要将类A的粒度分解为A1,A2. ①降低类的复杂 ...

  8. 设计模式---设计模式的分类及六大原则

    设计模式 1.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:   工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式. 结构性模型,共七种:   适配器模型,装饰器模型,代 ...

  9. Java设计模式-设计模式概述

    1 软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中. 1977年美国著名建筑大师.加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚 ...

最新文章

  1. C# 中串口通信 serialport1.DataReceived 函数无法触发或者出发延时等等问题解决方法
  2. Android Memory Management
  3. Java 判断3位数
  4. 求虚拟机11.0密钥
  5. dagger2 注入_使用Dagger 2在GWT中进行依赖注入
  6. tensorflow log 日志级别设置
  7. mysql 循环体 如何测试_mysql里如何循环插入数据,进行测试
  8. 解决T400死机的问题!
  9. 如何安装python3.8_python3.8下载及安装步骤详解
  10. 微信独立精彩互换抢红包系统源码ThinkPHP开源版
  11. Tensorflow-gpu 2.4.1与CUDA11.1,cuDNN8.1配置问题
  12. Nancy基于JwtBearer认证的使用与实现
  13. matable的作用
  14. 运筹说 第41期 | 运输问题硬核知识点梳理—表上作业法求解运输问题
  15. 鸿蒙桌面设置教程,鸿蒙系统桌面怎么设置好看?好看的鸿蒙系统手机桌面设置布局推荐...
  16. 1.python程序图标制作
  17. 台式计算机如何自动开关机,电脑怎么设置自动关机时间 电脑自动开机时间怎么设置...
  18. ipad iphone开发_如何在iPhone或iPad上随机播放或重复播放歌曲
  19. STM32MP157C-DK2->Develop on Arm® Cortex®-A7之 C语言开发uart例程
  20. 2022.12.14 英语背诵

热门文章

  1. 手机网站支付转Native支付--Android
  2. 前端程序员初步认识 docker
  3. 微型计算机赛睿寒冰5评测,为什么说寒冰5才是赛睿性价比最高的游戏耳机?
  4. linux系统视频软件,腾讯视频Linux版下载
  5. 51Nod - 1247 找规律
  6. 工资管理系统的需求概述的资料收集与分析:
  7. jsnes-FC模拟器-在线玩fc游戏
  8. 关于RT thread系统节拍时钟的配置
  9. 岛屿周长c语言,岛屿的周长 --leetcode刷题,golang实现
  10. 写给新手的DMOZ网站提交注意事项