[设计模式] 设计模式之总述【0】

0 序

  • 很多设计模式,有在项目各个场合使用,但自从大学上完设计模块那门课程后,就没有进行系统性总结提炼(或者之前总结,但总是零零碎碎的,散落在自己的各个笔记系统中)。

  • 这样在遇到一些经典需求场景或复杂需求时,不能随时从设计模式这个工具箱里胸有成竹地掏出来。

所以,系统性的、成系列地总结设计模式,一直是在计划中的事情。

  • 总述,就是高屋建瓴的纲领性篇章,把设计模式的六大原则、uml的若干关系、设计模式的起源与分类进行了系统地总结。

  • 万变不离其宗,不管是哪种设计模式,也都始终围绕着软件工程学的核心宗旨(六个大字): 高内聚,低耦合。

1 概述:设计模式

定义

简介

  • 设计模式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)。

  • 他们所提出的设计模式主要是基于以下的面向对象设计原则。
  • 面向接口编程,而不是面向实现编程。
  • 优先使用对象组合,而不是继承。

使用设计模式的意义

设计模式在软件开发中的两个主要用途与意义。

1. 开发人员的共同平台/共同语言

  • 设计模式提供了一个标准的术语系统,且具体到特定的情景。

例如,单例设计模式意味着使用单个对象,这样所有熟悉单例设计模式的开发人员都能使用单个对象,并且可以通过这种方式告诉对方,程序使用的是单例模式。

2. 最佳实践

  • 设计模式已经经历了很长一段时间的发展,它们提供了软件开发过程中面临的一般问题的最佳解决方案。

学习这些模式有助于经验不足的开发人员通过一种简单快捷的方式来学习软件设计。

设计模式的六大原则

开闭原则:对扩展开放,对修改关闭 接口隔离原则 : 使用多个专门的接口,而不用单一的总接口
里氏代换原则 : 所有引用基类(父类)的地方,都必须能透明地使用其子类的对象
继承复用的基石。
最少知道原则/迪米特原则 : 一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
依赖倒转原则 : 针对接口编程,依赖于抽象而非依赖于具体/实现。
开闭原则的基础。
单一职责原则:1个类只负责 1 个功能领域中相应的职责,就 1 个类而言,应只有 1 个引起它变化的原因
  • 合成复用原则

尽量使用合成/聚合的方式,而不是使用继承。(多依赖/合成,少继承)

  • 开闭原则目标里氏代换基础依赖倒转手段

UML类图的六大关系

  • 继承/泛化(Extends;is-a) 
  • 实现(Realization)
  • 依赖(Dependency;use-a)  
  • 关联(Association) 【较为混淆和难以理解的】
  • 聚合(has-a)
  • 组合(强聚合)(contains-a) 

设计模式的分类

  • 设计模式大致上存在 23 种经典的设计模式。

它们又可以分为三大类;而对于常用的设计模式,我们要花多点时间理解掌握。对于不常用的设计模式,我们只需要稍微了解即可。按照类型和是否常用,设计模式进行了简单的分类,具体如下所示:

创建型x6 | Creational Patterns

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

  • 创建型(创建型模式提供了创建对象的机制, 能够提升已有代码的灵活性和可复用性)

结构型x8 | Structural Patterns

这些模式关注对象之间的组合和关系,旨在解决如何构建灵活且可复用的类和对象结构。

  • 结构型(结构型模式介绍如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效)

行为型x12 | Behavioral Patterns

这些模式关注对象之间的通信和交互,旨在解决对象之间的责任分配和算法的封装。

  • 行为型(行为模式负责对象间的高效沟通和职责委派)

J2EE 模式

这些设计模式特别关注表示层。这些模式是由 Sun Java Center 鉴定的。

  • MVC 模式(MVC Pattern)
  • 业务代表模式(Business Delegate Pattern)
  • 组合实体模式(Composite Entity Pattern)
  • 数据访问对象模式(Data Access Object Pattern)
  • 前端控制器模式(Front Controller Pattern)
  • 拦截过滤器模式(Intercepting Filter Pattern)
  • 服务定位器模式(Service Locator Pattern)
  • 传输对象模式(Transfer Object Pattern)

小结:设计模式间的关系

Y FAQ for 设计模式

Q:Java 生成对象的方法都有哪些?

Java中有5类创建对象的方式

  • 1、new
  • 2、反射,Class.newInstance()Contructor.newInstance()

其本质是一样的,都采用了反射机制

  • 3、clone方法

本质:原型模式

  • 4、反序列化
  • 5、JNI

Q:围绕着包装的设计模式?

  • 装饰者模式Decorator Pattern):包装另一个对象,并提供额外的行为
  • 适配器模式Adapter Pattern):包装另一个对象,并提供不同的接口
  • 外观模式Facade Pattern):包装许多对象以简化它们的接口
  • 代理模式Proxy Pattern):包装另一个对象,并【控制】对它的访问

Y 推荐文献

工厂方法模式 / 装饰器模式

X 参考文献

posted @ 2023-03-07 21:26  千千寰宇  阅读(77)  评论(0)    收藏  举报