文章目录

  • 设计模式(Design Pattern)
  • 一、设计模式的分类
    • 1. 基础型模式 (Fundamental Pattern)
    • 2. 创建型模式 (Creational Pattern)
    • 3. 结构型模式 (Structural Pattern)
    • 4. 行为型模式 (Behavioral Pattern)
    • 5. 并发型模式 (Concurrency Pattern)
  • 二、设计模式详解
    • 1.工厂方法模式(Factory Method)
      • 应用场景
      • 缺点
    • 2.策略模式(Strategy Pattern)
      • 应用场景
      • 缺点
    • 3.访问者模式(Visitor Pattern)
      • 应用场景
      • 缺点
    • 4.装饰模式(Decorator)
      • 应用场景
      • 缺点
    • 5.迭代器模式(Iterator)
      • 应用场景
      • 缺点
    • 6. 单例模式(Singleton)
      • 应用场景
      • 缺点

设计模式(Design Pattern)

一套被反复使用的,多数人知晓的,经过分类遍目的、代码设计经验的总结,使用设计模式是为了可重复使用代码,让代码更容易被他人理解并且提高代码的可靠性(目的)。设计模式是一种对软件系统中不断重复出现的设计问题的解决方案进行文档化的技术,也是一种共享专家设计经验的技术。

一、设计模式的分类

1. 基础型模式 (Fundamental Pattern)

Delegation pattern
Interface pattern
Proxy pattern

2. 创建型模式 (Creational Pattern)

抽象工厂模式(Abstract Factory)
工厂方法模式(Factory Method)
单例模式(Singleton)

3. 结构型模式 (Structural Pattern)

适配器模式(Adapter)
桥接模式(Bridge)
装饰模式(Decorator)

4. 行为型模式 (Behavioral Pattern)

职责链模式(Chain of Responsibility)
迭代器模式(Iterator)
观察者模式(Observer)
状态模式(State)
策略模式(Strategy)
访问者模式(Visitor)

5. 并发型模式 (Concurrency Pattern)

Active object
Monitor object
Thread pool pattern

二、设计模式详解

1.工厂方法模式(Factory Method)

应用场景

  • 客户只知道创建产品的工厂名,而不知道具体的产品名。如 TCL 电视工厂、海信电视工厂等。

  • 创建对象的任务由多个具体子工厂中的某一个完成,而抽象工厂只提供创建产品的接口。

缺点

  • 类的个数容易过多,增加复杂度

  • 增加了系统的抽象性和理解难度


2.策略模式(Strategy Pattern)

策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数,关系图如下:

应用场景

  • 一个系统需要动态地在几种算法中选择一种时,可将每个算法封装到策略类中。

  • 一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现,可将每个条件分支移入它们各自的策略类中以代替这些条件语句。

  • 系统中各算法彼此完全独立,且要求对客户隐藏具体算法的实现细节时。

  • 多个类只区别在表现行为不同,可以使用策略模式,在运行时动态选择具体要执行的行为。

缺点

  • 客户端必须理解所有策略算法的区别,以便适时选择恰当的算法类。

  • 策略模式造成很多的策略类,增加维护难度。

3.访问者模式(Visitor Pattern)

策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数,关系图如下:

应用场景

  • 对象结构相对稳定,但其操作算法经常变化的程序。

  • 对象结构中的对象需要提供多种不同且不相关的操作,而且要避免让这些操作的变化影响对象的结构。

  • 对象结构包含很多类型的对象,希望对这些对象实施一些依赖于其具体类型的操作。

缺点

  • 增加新的元素类很困难。在访问者模式中,每增加一个新的元素类,都要在每一个具体访问者类中增加相应的具体操作,这违背了“开闭原则”。

  • 破坏封装。访问者模式中具体元素对访问者公布细节,这破坏了对象的封装性。

  • 访问者模式依赖了具体类,而没有依赖抽象类。

4.装饰模式(Decorator)

指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式。

应用场景

  • 当需要给一个现有类添加附加职责,而又不能采用生成子类的方法进行扩充时。例如,该类被隐藏或者该类是终极类或者采用继承方式会产生大量的子类

  • 当需要通过对现有的一组基本功能进行排列组合而产生非常多的功能时,采用继承关系很难实现,而采用装饰器模式却很好实现。

  • 当对象的功能要求可以动态地添加,也可以再动态地撤销时。

缺点

  • 装饰器模式会增加许多子类,过度使用会增加程序的复杂性。

5.迭代器模式(Iterator)

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

应用场景

  • 当访问一个聚合对象的内容而无须暴露它的内部表示时。

  • 当需要为聚合对象提供多种遍历方式时。

  • 当需要为遍历不同的聚合结构提供一个统一的接口时。

缺点

  • 装饰器模式会增加许多子类,过度使用会增加程序的复杂性。

6. 单例模式(Singleton)

单例对象能保证在一个JVM中,该对象只有一个实例存在。例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误。

应用场景

  • 需要频繁创建的一些类,使用单例可以降低系统的内存压力,减少 GC。。

  • 某类只要求生成一个对象的时候,如一个班中的班长、每个人的身份证号等。

  • 某些类创建实例时占用资源较多,或实例化耗时较长,且经常使用。

  • 某类需要频繁实例化,而创建的对象又频繁被销毁的时候,如多线程的线程池、网络连接池等。

  • 对于一些控制硬件级别的操作,或者从系统上来讲应当是单一控制逻辑的操作,如果有多个实例,则系统会完全乱套。

缺点

  • 单例模式一般没有接口,扩展困难。如果要扩展,则除了修改原来的代码,没有第二种途径,违背开闭原则。
  • ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210227181313628.gif

几种常用的设计模式 (Design Pattern)相关推荐

  1. 设计模式(Design Pattern)详细整理(含思维导图)

    设计模式(Design Pattern) 设计模式(Design pattern)代表了最佳的实践,是软件开发人员在软件开发过程中面临的一般问题的解决方案.这些解决方案是众多软件开发人员经过相当长的一 ...

  2. 由浅入深,带你玩转几种常用java设计模式

    由浅入深,带你玩转几种常用java设计模式 博客分类: 技术博客 课堂总结扩展 java设计模式单例工厂事件监听 PART A:前言 平常我们都在敲代码,为了要实现一些我们希望看到的功能,敲一大堆一大 ...

  3. 快速梳理23种常用的设计模式

    本文旨在快速梳理常用的设计模式,了解每个模式主要针对的是哪些情况以及其基础特征,每个模式前都有列举出一个或多个可以深入阅读的参考网页,以供读者详细了解其实现. 快速回忆 一.创建型 单例(Single ...

  4. GOF23种设计模式(Design Pattern)总结

    比较 设计模式 常用程度 适用层次 引入时机 结构复杂度 Abstract Factory 比较常用 应用级 设计时 比较复杂 Builder 一般 代码级 编码时 一般 Factory Method ...

  5. Java设计模式 Design Pattern:包装模式 Decorator Pattern

    意图 Attach additional responsibilities to an object dynamically. 为一个对象动态的添加职责. Decorators provide a f ...

  6. 面向对象有哪几种常用的设计模式,六大设计原则是什么

    常用设计模式:单例模式(有的叫单元素模式,单态模式),工厂模式,观察者模式,命令链模式,策略模式. 1),OCP原则(也叫开闭原则) 2),SRP原则(职责单一原则) 3),OCP原则(里氏替换原则) ...

  7. 【小松教你手游开发】【面试必读(编程基础)】几种常用的设计模式介绍

    http://blog.csdn.net/xsl1990/article/details/16359289 转载于:https://blog.51cto.com/13638120/2084932

  8. JAVA设计模式Design Pattern→单例模式Singleton Pattern、工厂模式Factory Pattern、代理模式Proxy Pattern

    私有化构造函数的类可以提供相应的 "接口"(一般就是静态方法)来返回自己的唯一实例供外部调用,像这样的确保只生成一个实例的模式被称作单例模式. 工厂模式,一个模型,用来大规模的生产 ...

  9. 游戏开发中常用的设计模式 【game design patterns】

    单例模式(Singleton Pattern):用于确保在游戏中只存在一个实例,例如游戏管理器(Game Manager)或资源管理器(Resource Manager). 工厂模式(Factory ...

最新文章

  1. spring配置datasource三种方式
  2. struts2(三) 输入校验和拦截器
  3. Windows异常学习笔记(四)—— 编译器扩展SEH
  4. 《http权威指南》阅读笔记(十二)
  5. redhat安装pure-ftpd+mysql时出现libmysqlclient错误的解决办法
  6. mysql忘记root密码解决办法
  7. python是谁维护的_Python 库从开发到维护
  8. 组合数(Lucas定理) + 快速幂 --- HDU 5226 Tom and matrix
  9. winedt (latex 编译器)解决中文的问题(CJK CTEX)
  10. 【转】Odoo开发之:工作流 workflow
  11. python:使用sklearn 计算 precision、recall、F1 score(多分类)
  12. 是德科技发力5G测试测量 欲攻占市场领导地位
  13. synchronized工作原理剖析(二)
  14. w25q64 linux,QSPI读写W25Q256和W25Q128以及W25Q64有什么区别?
  15. LPC1788 USB调试
  16. 【cocos2dx】记录解决csb创建font字体造成的内存泄漏问题
  17. jpa原生query_SpringDataJpa使用原生sql的小坑
  18. 0x00F749F6 处(位于 基于多态实现职工管理系统.exe 中)引发的异常: 0xC0000005: 读取位置 0x00000004 时发生访问冲突。
  19. 如何取消掉计算机更新图标,win10右下角更新提醒怎么去掉_电脑右下角总出现win10系统升级提示如何关闭...
  20. 武汉工程大学信息与计算科学专业面向对象程序设计课程设计题

热门文章

  1. 机器人学习笔记(1)导论
  2. 软件设计师——计算机网络
  3. 2022-2028全球与中国高灵敏度呼吸机市场现状及未来发展趋势
  4. PHP资源列表(转)
  5. 计算机连接不上蓝牙鼠标,笔者为您win7系统蓝牙鼠标连接不上的具体步骤
  6. 网络安全技术CTF竞赛模式与训练平台
  7. NETWORK06 - 企业网络拓扑图
  8. 6.数值微积分与方程求解
  9. 单周期31条指令CPU设计---bug总结
  10. L2TP或者PPTP拨号后只能访问远端内网而无法访问Internet的原因及解决办法