设计模式——13 与设计模式相处(真实世界中的模式)

2024-02-02 17:18

本文主要是介绍设计模式——13 与设计模式相处(真实世界中的模式),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 与设计模式相处
    • 综述
      • 什么事设计模式
    • 要点
    • 怎么选择模式?
    • 分类方式
      • 创建型、行为型、结构型
        • 创建型
        • 行为型
        • 结构型
      • 类、对象
        • 对象
    • 模式动物园
    • 反模式
      • 例子

与设计模式相处

综述

什么事设计模式

在某情境(Context)下,针对某问题的某种解决方案
情境:应用某个模式的情况
问题:逆向在某情境下达到的目标
解决方案:一个通用的设计,用来解决约束、达到目标

问题:我要如何准时上班?
情境:我将要是锁在车里了。
解决方案:打破 窗户、进入车内,启动引擎,然后开车上班。

一个目标,一个约束

需要力平衡(目标与约束平衡)才能创建一个模式的解决方案。

要点

  • 让设计模式自然而然地出现在你的设计中,而不是为了使用而使用
  • 设计模式并非僵化的教条;你可以依据自己的需要采用或调整。
  • 总是使用满足需要的最简单解决方案,不管它用不用模式。
  • 学习设计模式的类目,可以帮你自己熟悉这些模式以及它们之间的关系。
  • 模式的分类(或类目)是将模式分成不同的族群,如果这么做对你有帮助,就采用吧!
  • 你必须相当专注才能够成为一个模式的作家:这需要时间也需要耐心,同时还必须乐意做大量的精化工作。
  • 请牢记:你所遇到大多数的模式都是现有模式的变体,而非新的模式。
  • 模式能够为你带来的最大好处一是:让你的团队拥有共享词汇。
  • 任何社群都有自己的行话,模式社群也是如此。别让这些行话绊着,在读完这本书之后,你已经能够应用大部分的行话了。

怎么选择模式?

模式名和分类
——模式名简洁地描述了模式的本质
意图
——设计模式是做什么的?它的基本原理和意图是什么?它解决的是什么样的特定设计问题?
别名
——模式的其他名称
动机
——用以说明一个设计同题以及如何用模式中的类、对象来解决该问题的特定情景。该情景会帮助你理解随后对模式更抽象的描述。
适用性
——什么情况下可以使用该设计模式?该模式可用来改进哪些不良设计?你怎样识别这些情况?
结构
——采用基于对象建模技术(OMT)[RBP+91]的表示法对模式中的类进行医形描述。我们也使用了交互图[JCJ092,B0094]来说明对象之间的请求序列和协作关系。附录B详细描述了这些表示法。
参与者
——指设计模式中的类和/或对象以及它们各自的职责。
协作
——模式的参与者怎样协作以实现它们的职责。
效果
—— 模式怎样支持它的目标?使用模式的效果和所需做的权衡取舍?系统结构的哪些方面可以独立改变?
实现
——实现模式时需要知道的一些提示、技术要点及应避免的缺陷,以及是否存在某些特定于实现语言的回题。
代码示例
——用来说明怎样用c++或smalltalk实现该模式的代码片段。
己知应用
——实际系统中发现的模式的例子。每个模式至少包括了两个不同领域的实例。
相关模式
——与这个模式紧密相关的模式有哪些?其闾重要的不同之处是什么?这个模式应与哪些其他模式一起使用?

这里写图片描述

命令模式
当需要将发出请求的对象和执行请求的对象解耦的时候,使用命令模式

分类方式

创建型、行为型、结构型

创建型

涉及到将对象实例化,这类模式都提供一个方法,将客户从所需要实例化的对象中解耦
Singleton
Builder
Prototype
Abstract Factory
Factory Method

行为型

涉及到类和对象如何交互及分配职责
Template Method
Visitor
Mediator
Iterator
Command
Memento
Interpreter
Observer
Chain of Responsibility
State
Strategy

结构型

把类或对象组合到更大的结构中
Decorator
Proxy
Composite
Flyweight
Bridge
Adapter

类、对象

描述类之间的关系如何通过集成定义。类模式的关系是在编译时建立的。
Template Method
Adapter
Factory Method
Interpreter

对象

描述对象之间的关系,而且主要是利用组合定义。对象模式的关系通常在运行时建立,而且更加动态、更有弹性。
Decorator
Proxy
Composite
Flyweight
Bridge
Visitor
Mediator
Iterator
Command
Memento
Observer
Chain of Responsibility
State
Strategy
singleton
builder
prototype
abstract Factory

模式动物园

架构模式
用来建立生气勃勃的建筑、城镇和城市的架构。这也正是模式开始的地方
栖息地:从你所居住、观看、参观的建筑物中,可以发现它的踪迹。

应用模式
是建立系统级架构的模式。许多多层的架构都属于这一类目
栖息地:出现在三层架构、客户/服务器系统以及Web中
野外笔记:MVC可算是其中的一种

领域特定模式
关注特定领域的问题,例如并发系统或实时系统
栖息地:

业务流程模式
描述业务、顾客和数据之间的交互,此种模式能够处理如“如何有效决策并沟通决策”之类的问题。
出没公司的会议室以及项目管理会议中

组织模式
描述了人类组织的结构以及实践。到目前为止大多数努力聚焦于制造或支持软件的组织
栖息地:
开发团队:
顾客支持团队:

用户界面设计模式
致力于解决设计交互式软件时的问题。
栖息地:被发现在视频游戏设计者、cuj构造者和制作者附近

反模式

告诉你如何采用一个不好的解决方案解决一个问题

例子

名称:黄金榔头
问题:你需要为你的开发选择技术,而且你相信正好有一种技术能够主宰这个架构。
情境:你需要开发某个新的系统或者是一套软件,然而此系统或软件却无法和开发团队所熟悉的技术相吻合。
力:(告诉你为什么这个解决方案是有吸引力的)
开发团队致力于采用他们所熟悉的技术。
开发团队并不熟悉其他技术。
采用不熟悉的技术被认为风险比较高。
使用熟悉的技术做开发,比较容易规划
和预估。
原本的解决方案:
反正就使用熟悉的技术好了。将熟悉的技术强迫性地用在许多问题上,甚至在明显不适当的地方也照用。(不好但有吸引力的解决方案)
重构的解决方案:开发人员通过教育、培训和读书会,可以学会新的解决方案。 (如何使用一个好的解决方案)
例子:(这个反模式会出现在什么地方)
当采用开放源码的替代品时,web公司依然持续使用并维护他们内部自行开发的缓存系统。

这篇关于设计模式——13 与设计模式相处(真实世界中的模式)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/671411

相关文章

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

模版方法模式template method

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/template-method 超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 上层接口有默认实现的方法和子类需要自己实现的方法

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

迭代器模式iterator

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/iterator 不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者

springboot实战学习(1)(开发模式与环境)

目录 一、实战学习的引言 (1)前后端的大致学习模块 (2)后端 (3)前端 二、开发模式 一、实战学习的引言 (1)前后端的大致学习模块 (2)后端 Validation:做参数校验Mybatis:做数据库的操作Redis:做缓存Junit:单元测试项目部署:springboot项目部署相关的知识 (3)前端 Vite:Vue项目的脚手架Router:路由Pina:状态管理Eleme

状态模式state

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/state 在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样。 在状态模式中,player.getState()获取的是player的当前状态,通常是一个实现了状态接口的对象。 onPlay()是状态模式中定义的一个方法,不同状态下(例如“正在播放”、“暂停

软件架构模式:5 分钟阅读

原文: https://orkhanscience.medium.com/software-architecture-patterns-5-mins-read-e9e3c8eb47d2 软件架构模式:5 分钟阅读 当有人潜入软件工程世界时,有一天他需要学习软件架构模式的基础知识。当我刚接触编码时,我不知道从哪里获得简要介绍现有架构模式的资源,这样它就不会太详细和混乱,而是非常抽象和易