设计模式-23种基础模式目录

种一棵树最好的时间点是十年前,其次是现在
—— Dambisa Moyo《dead aid》

对软件设计来说,23种基本设计模式就像象棋里面的基本杀法一样。就算你从来没学过基本杀法,从来没听说过二鬼拍门、八角马和双车错这种专业术语,也不代表你一局都赢不了

那是不是说基础设计模式跟基础杀法都是形式主义的产物,用来装X的无用知识?


怎么可能,就拿二鬼拍门来说,没学过的棋手往往会在多兵残局中落下风,甚至必胜局被顶和(比如 三高兵必胜士相全 的残局,虽然是必胜,但必须做出二鬼拍门的棋形,这也是唯一的赢法。但如果没学过,往往会被顶和)

你应该注意到了,我刚刚用的词是 做出。学过基本杀法的人从一开始就会思考如何形成基本杀法里描述的棋形,所以会比没学过的人少走一些弯路,对于激烈的对攻局来说,最后的胜利也经常会因为一两步的顺序而易主


23种基本设计模式虽然不至于让你跟谁决出生死,但是对于软件设计来说,上到系统设计,小到某个组件关节,通常都是有多种方案可供选择的。设计模式为你提供的是前辈们总结出来的最优解。同时通过了解设计模式,你也能理解他们当年的解题思路,这种思路的根据是什么,以及一些四海之内皆可用的原则

设计模式不会让你立刻成为设计系统的大师,相反你在消化的过程中可能还要经历很长一段看到什么都想用模式的菜鸟阶段。但是别灰心,总有一天,你会发现你在写代码时会突然冒出这样一个念头:

——咦,我刚刚的这段实现,不就是 xx 模式吗?




创建型模式

创建型模式抽象了实例化过程。他们帮助一个系统独立于如何创建、组合和表示他的那些对象。

  • 工厂方法
  • 抽象工厂
  • 生成器
  • 原型
  • 单例



结构型模式

结构型模式涉及如何组合对象以获取更大的结构

  • 适配器
  • 桥接
  • 组合
  • 装饰者
  • 外观
  • 享元
  • 代理



行为型模式

行为型模式涉及算法和对象间职责的分配。行为型模式不仅描述对象或类的模式,还描述它们之间的通信模式

  • 职责链
  • 命令
  • 解释器
  • 迭代器
  • 中介者
  • 备忘录
  • 观察者
  • 状态
  • 策略
  • 模版方法
  • 访问者




还可以通过专栏【设计模式】进行访问,欢迎点赞、收藏或订阅~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/1419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenHarmony鸿蒙南向开发案例:【智能猫眼(基于3518开发板)】

样例简介 本Demo是基于Hi3518开发板,使用开源OpenHarmony开发的RTSP协议流媒体应用。达到将Hi3518开发板中摄像头获取的数据通过RTSP协议传输到手机并显示 。 rtsp实现可参考文档:openharmony_1.0.1实现RTSPServer 运行效果 样例原理 如上图所示&…

【编程Tool】VS code安装与使用配置保姆级教程

目录 1.软件介绍 2.软件下载: 3.安装 3.1. 双击可执行文件 3.2. 同意协议 3.3. 选择安装路径,默认在C盘 3.4. 点击下一步 3.5. 可选择所有附加任务 3.6. 点击安装 3.7. 等待安装 3.8. 点击完成 3.9. 安装成功 4.下载MinGW64 4.1. MinGW-64下载地址 &…

【UnityShader】图片圆角

1.需求 我们在开发的时候,有时候一些按钮或者菜单栏的边角是直角的需要改成圆角,但是让美术重新绘制耽误时间不说也确实没必要,这个时候我们不妨使用一个简单的shader去解决这个问题,下面我们就讲讲这个shader要如何实现。 需求1…

QoS流量整形

流量整形是一种带宽技术形式,它延迟某些类型的网络数据包的流动,以确保更高优先级应用程序的网络性能,它主要涉及调整数据传输速率,以确保网络资源以最佳容量得到利用。流量整形的目的是防止网络拥塞并提高网络的整体性能&#xf…

【融合ChatGPT等AI模型】Python-GEE遥感云大数据分析、管理与可视化及多领域应用

随着航空、航天、近地空间遥感平台的持续发展,遥感技术近年来取得显著进步。遥感数据的空间、时间、光谱分辨率及数据量均大幅提升,呈现出大数据特征。这为相关研究带来了新机遇,但同时也带来巨大挑战。传统的工作站和服务器已无法满足大区域…

JavaEE 初阶篇-深入了解 I/O 流(FileInputStream 与 FileOutputStream 、Reader 与 Writer)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 I/O 流概述 2.0 文件字节输入流(FileInputStream) 2.1 创建 FileInputStream 对象 2.2 读取数据 2.3 关闭流 3.0 文件字节输出流(FileOutputStream) 3.1 创建 Fi…

初识C++·类和对象(中)(3)

前言,最难的已经结束了,来点轻松了放松一下。 目录 1 流重载 2 const成员 3 取地址及const取地址操作符重载 1 流重载 C语言中printf和scanf是有局限性,只能直接打印内置类型,对于自定义类型就哦豁了,所以在C中就…

勒索病毒防护

勒索病毒定义 勒索病毒并不是某一个病毒, 而是一类病毒的统称,主要以邮件、程序、木马、网页挂马的形式进行传播,利用各种加密算法对特定格式系统文件进行加密,被感染者一般无法解密, 必须拿到解密的私钥才有可能破解。…

Linux——(grep指令及zip/tar压缩指令)

1.grep指令 语法: grep【选项】查找字符串 文件 功能: 在文件中搜索字符串,将找到的行打印出来 常用选项: -i :忽略大小写,所以大小写视为相同 -n : 顺便输出行号 -v :反向选择&…

MyBatis 从入门到精通:分页在MyBatis中使用

MyBatis 从入门到精通:分页在MyBatis中使用 先欣赏下美女🚀分页在MyBatis中使用👩‍💻摘要🎯引言💡正文内容😕 为什么要分页?🚀 使用Limit分页介绍📄 使用Li…

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器(TcpServer板块)

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现⾼并发服务器(TcpServer板块) 一、思路图二、模式关系图三、定时器的设计1、Linux本身给我们的定时器2、我们自己实现的定时器(1)代码部分(2)思…

Java操作jira工具类

需求:拉取并同步jira数据(项目,版本,缺陷,任务) 实现方式以及注意点: 1.jira中没有接口直接获取所有用户,但是可以获取组内用户,每个jira账户都会对应jira_user这个组&…

ViewFlipper飞掠视图

手机屏幕尺寸不大,为了在有限空间中展示尽可能多的信息,Android设计了多种方式显示超出屏幕尺寸的界面,包括上下滚动、左右滑动等。飞掠视图ViewFlipper的层次翻动就是其中一项技术。两者都是一系列类似视图的组合,与ViewPager(翻…

Linux华硕笔记本安装ROG Asusctl

基础环境 适用系统: linux mint 21ubuntu 22.04 安装版本: asusctl-5.0.10rust 1.77.2 构建 安装编译环境 sudo apt-get update sudo apt-get install -y \libasound2-dev \libfreetype6-dev \libexpat1-dev \libxcb-composite0-dev \libssl-dev …

数字谐振器设计

数字谐振器设计 电路里的谐振:当电路中激励的频率等于电路的固有频率时,电路电磁振荡的振幅也将达到峰值。 形式一 形式二 例子

4.21java聊天室项目小结

基本完成了用户的登录注册功能,可以实现用户账号登录和邮箱登录功能,忘记密码通过邮箱发送验证码找回,注册账号功能,并传递给客户端更新数据库的表内容 注册功能: 注册成功后密码进行MD5加密并通过服务器保存到数据库…

springboot结合elasticJob

先说一说什么是elasticJob。 ElasticJob是一个分布式任务调度的解决方案,它由俩个相互独立的子项目Elastic-job-lite和Elastic- job-cloud组成。 任务调度:是指系统为了自动完成特定任务,在任务的特定时刻去执行任务的过程。 分布式&#xf…

内存泄露和内存溢出,有何区别,如何预防和解决

内存泄露和内存溢出是什么意思 内存泄露和内存溢出是两种不同的计算机程序运行时可能遇到的问题,它们的发生、表现和影响各不相同: 内存泄漏(Memory Leak)。内存泄漏是指程序在分配了内存之后,无法释放这些内存空间的…

剑指offer剪绳子;leetcode:LCR 131. 砍竹子 I

现需要将一根长为正整数 bamboo_len 的竹子砍为若干段&#xff0c;每段长度均为正整数。请返回每段竹子长度的最大乘积是多少。 示例 1&#xff1a; 输入: bamboo_len 12 输出: 81提示&#xff1a; 2 < bamboo_len < 58 注意&#xff1a;本题与主站 343 题相同&#…

SQLite导出数据库至sql文件

SQLite是一款实现了自包含、无服务器、零配置、事务性SQL数据库引擎的软件库。SQLite是世界上部署最广泛的SQL数据库引擎。 SQLite 是非常小的&#xff0c;是轻量级的&#xff0c;完全配置时小于 400KiB&#xff0c;省略可选功能配置时小于250KiB。 SQLite 源代码不受版权限制。…