什么是设计模式?
目录
概述:
什么是模式!!
为什么学习模式!!
模式和框架的比较:
设计模式研究的历史
关于pattern的历史
Gang of Four(GoF)
关于”Design”Pattern”
重提:指导模式设计的三个概念
1.重用(reuse):是目标
2.接口与实现分离
3.Decouple
如何描述一个模式
1.关键要素
2.解决方案
3.评测
4.相关模式
概述:
什么是模式!!
每个模式概述了一个问题,该问题反复在我们的周围出现,每个模式给出了对该问题的核心解决办法,因此,人们可以反复给出了对该问题的核心解决办法,人们可以反复使用给解决方法解决类似问题。
为什么学习模式!!
1.模式可以帮助我们学习成功人士的经验,从而避免失误
2.提升我们的认知
3.读懂源代码,提升自己代码的水平
4.面试工作的必备技能
模式和框架的比较:
1.模式(Patterns)
1.1支持软件的结构和设计的重用
1.2抓住了特定领域中问题的成功解决方案中的静态,动态结果和相互之间的协作关系
1.3patterns与开发语言无关,但是建立在一定的环境基础上
1.4例如:经典的MVC、Factory Method
2.框架(Frameworks)
2.1支持细节设计和代码的重用
2.2framework是一组组件的综合,这些组件相互协作,为一族相关应用提供了一个可重用的框架结构
3.两者结合
3.1提高软件的质量
3.2重用性,扩展性,性能,可维护性
4.框架的HOllyood Principle
-(“Don’t call us,We’ll call you.”)
5.模式和框架的比较:
5.1设计模式比框架更抽象
5.2和框架相比,设计模式是更小单元的架构元素
5.3从使用的广度来说,设计模式比框架更广,它与应用的相关性更小
设计模式研究的历史
关于pattern的历史
-A Pattern Language, Christopher Alexander,1997
-”Advanced C++ : Programming Styles and ldims,” James Coplien, 1992
-”Design Patterns: Elements of Reusable Object - Oriented Software”,GOF,1995
-”Pattern-Oriented Software Architecture: A System of Patterns”(简单”POSA”),GoV,1996
Gang of Four(GoF)
关于”Design”Pattern”
1.对已有模式的整理、分类
2.一套描述模式的词汇,可用于交流和文档化
3.为软件设计总结了宝贵的经验,这些设计经验可以被重用,但不是简单的代码重用
4.分类:
-Creational Patterns
-Structural Patterns
-Behavioral Patterns
5.在软件设计模式领域,起到先驱的作用
重提:指导模式设计的三个概念
1.重用(reuse):是目标
-两种重要的重用手段
·Inheritance & composition
2.接口与实现分离
-接口保持不变,分离带来
-多态性(polymorphism)
3.Decouple
-降低复杂性
如何描述一个模式
1.关键要素
-模式名称
-问题,动机
-约束
-上下文
2.解决方案
-结构(Structure)
-参与者(Participants)
-协作(Collaboration)
-实现(Implementation)
3.评测
4.相关模式
相关文章:
![](https://img-blog.csdnimg.cn/10d46553089841bb88ca77ab55e4a6fa.png)
什么是设计模式?
目录 概述: 什么是模式!! 为什么学习模式!! 模式和框架的比较: 设计模式研究的历史 关于pattern的历史 Gang of Four(GoF) 关于”Design”Pattern” 重提:指导模式设计的三个概念 1.重用(reuse)…...
![](https://img-blog.csdnimg.cn/4bdd7ec23e7a4f35b97e12d7556257b9.png)
Node.js |(三)Node.js API:path模块及Node.js 模块化 | 尚硅谷2023版Node.js零基础视频教程
学习视频:尚硅谷2023版Node.js零基础视频教程,nodejs新手到高手 文章目录 📚path模块📚Node.js模块化🐇介绍🐇模块暴露数据⭐️模块初体验⭐️暴露数据 🐇导入文件模块🐇导入文件夹的…...
![](https://img-blog.csdnimg.cn/7bd1202286764a43bd53396456b3ff77.png)
Netty自定义编码解码器
上次通信的时候用的是自带的编解码器,今天自己实现一下自定义的。 1、自定义一下协议 //协议类 Data public class Protocol<T> implements Serializable {private Long id System.currentTimeMillis();private short msgType;// 假设1为请求 2为响应privat…...
![](https://img-blog.csdnimg.cn/cce213973d8a44b28dbdae6ff3708cd0.png)
HOperatorSet.OpenFramegrabber “GigEVision“
HOperatorSet.OpenFramegrabber "GigEVision"访问失败 直接跳出 但其他算子可以访问 重装halcon x86...
![](https://www.ngui.cc/images/no-images.jpg)
图的遍历DFSBFS-有向图无向图
西江月・证明 即得易见平凡,仿照上例显然。留作习题答案略,读者自证不难。 反之亦然同理,推论自然成立。略去过程Q.E.D.,由上可知证毕。 有向图的遍历可以使用深度优先搜索(DFS)和广度优先搜索(…...
![](https://img-blog.csdnimg.cn/990cfdfd1d0142f49b52d7e3a23c2bdb.png)
【NLP】深入浅出全面回顾注意力机制
深入浅出全面回顾注意力机制 1. 注意力机制概述2. 举个例子:使用PyTorch带注意力机制的Encoder-Decoder模型3. Transformer架构回顾3.1 Transformer的顶层设计3.2 Encoder与Decoder的输入3.3 高并发长记忆的实现self-attention的矩阵计算形式多头注意力(…...
![](https://www.ngui.cc/images/no-images.jpg)
Linux应用编程的read函数和Linux驱动编程的read函数的区别
Linux应用编程的read函数用于从文件描述符(文件、管道、套接字等)中读取数据。它的原型如下: ssize_t read(int fd, void *buf, size_t count);其中,fd参数是文件描述符,buf是用于存储读取数据的缓冲区,co…...
![](https://img-blog.csdnimg.cn/eefbf54241e04c9aa98e887e3493e288.png)
Kubernetes(K8s)从入门到精通系列之十:使用 kubeadm 创建一个高可用 etcd 集群
Kubernetes K8s从入门到精通系列之十:使用 kubeadm 创建一个高可用 etcd 集群 一、etcd高可用拓扑选项1.堆叠(Stacked)etcd 拓扑2.外部 etcd 拓扑 二、准备工作三、建立集群1.将 kubelet 配置为 etcd 的服务管理器。2.为 kubeadm 创建配置文件…...
![](https://img-blog.csdnimg.cn/img_convert/421de6bdee5da64a3d0268ab4ede2698.png)
使用动态规划实现错排问题-2023年全国青少年信息素养大赛Python复赛真题精选
[导读]:超平老师计划推出《全国青少年信息素养大赛Python编程真题解析》50讲,这是超平老师解读Python编程挑战赛真题系列的第15讲。 全国青少年信息素养大赛(原全国青少年电子信息智能创新大赛)是“世界机器人大会青少年机器人设…...
![](https://img-blog.csdnimg.cn/46ae17e5a47e4290af9a84abf3dfa39f.png)
大规模向量检索库Faiss学习总结记录
因为最近要使用到faiss来做检索和查询,所以这里只好抽出点时间来学习下,本文主要是自己最近学习的记录,来源于网络资料查询总结,仅用作个人学习总结记录。 Faiss的全称是Facebook AI Similarity Search,是FaceBook的A…...
![](https://img-blog.csdnimg.cn/65a467e627e84889b97ccbddcece0c53.png)
SpringCloudAlibaba之Sentinel(一)流控篇
前言: 为什么使用Sentinel,这是一个高可用组件,为了使我们的微服务高可用而生 我们的服务会因为什么被打垮? 一,流量激增 缓存未预热,线程池被占满 ,无法响应 二,被其他服务拖…...
![](https://img-blog.csdnimg.cn/de3648c6c3e04c1186478610984f1c27.png#pic_center)
哪种模式ip更适合你的爬虫项目?
作为一名爬虫程序员,对于数据的采集和抓取有着浓厚的兴趣。当谈到爬虫ip时,你可能会听说过两种常见的爬虫ip类型:Socks5爬虫ip和HTTP爬虫ip。但到底哪一种在你的爬虫项目中更适合呢?本文将帮助你进行比较和选择。 首先,…...
![](https://img-blog.csdnimg.cn/img_convert/b091d29ce3eab111013f738aea980cc7.png)
优维低代码实践:对接数据
优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 优维…...
![](https://www.ngui.cc/images/no-images.jpg)
docker 离线模式-部署容器
有网络的情况下下载需要的镜像 比如(下面以tomcat为例子,其他镜像类似) docker pull tomcat打包镜像文件到本地 docker save tomcat -o tomcat.tar将tomcat.tar 上传到内网服务器(无外网环境) 导入镜像 docker load -i tomcat.tar创建容器…...
![](https://www.ngui.cc/images/no-images.jpg)
MDN-HTTP
参考资料 文章目录 HTTP简介HTTP 和 HTTPSHTTP消息典型的HTTP会话HTTP响应状态HTTP安全HTTP CookieHTTP压缩 HTTP简介 HTTP(Hypertext Transfer Protocol)是一种用于在计算机网络中传输超文本和其他资源的应用层协议。他是互联网的基础协议之一&#x…...
![](https://www.ngui.cc/images/no-images.jpg)
【数据库】PostgreSQL中使用`SELECT DISTINCT`和`SUBSTRING`函数实现去重查询
在PostgreSQL中,我们可以使用SELECT DISTINCT和SUBSTRING函数来实现对某个字段进行去重查询。本文将介绍如何使用这两个函数来实现对resource_version字段的去重查询。 1. SELECT DISTINCT语句 SELECT DISTINCT语句用于从表中选择不重复的记录。如果没有指定列名&…...
![](https://img-blog.csdnimg.cn/eddab731db684f08b3cf816214209d4a.png)
笔记本WIFI连接无网络【实测有效,不用重启电脑】
笔记本Wifi连接无网络实测有效解决方案 问题描述: 笔记本买来一段时间后,WIFI网络连接开机一段时间还正常连接,但是过一段时间显示网络连接不上,重启电脑太麻烦,选择编写重启网络脚本解决。三步解决问题。 解决方案&a…...
![](https://img-blog.csdnimg.cn/9a7bb121d72a4fbbb4f882b5ee6c2033.png)
Java课题笔记~ Spring 概述
Spring 框架 一、Spring 概述 1、Spring 框架是什么 Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring 的核心是控制反转(IoC)和面向切面编程(AOP)。 Spring…...
![](https://img-blog.csdnimg.cn/img_convert/9fccfc5963e5de08ebd7d0c50e9bd865.png)
2022 robocom 世界机器人开发者大赛-本科组(国赛)
RC-u1 智能红绿灯 题目描述: RC-u1 智能红绿灯 为了最大化通行效率同时照顾老年人穿行马路,在某养老社区前,某科技公司设置了一个智能红绿灯。 这个红绿灯是这样设计的: 路的两旁设置了一个按钮,老年人希望通行马路时会…...
![](https://img-blog.csdnimg.cn/10e7fe74833447138497500a9fdb95b8.jpeg#pic_center)
【雕爷学编程】Arduino动手做(195)---HT16k33 矩阵 8*8点阵屏模块6
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…...
![](https://www.ngui.cc/images/no-images.jpg)
Typescript]基础篇之 tsc 命令解析
[Typescript]基础[TOC]([Typescript]基础篇之 tsc 命令解析 tsc 命令概览编译参数说明--declaration--watch 这里是对 tsc 的一个详细介绍 tsc 命令概览 安装 Typescript 后可以使用 tsc 编译 ts 文件,tsc 命令是否支持其它参数 如果需要查看 tsc 支持的命令,或者…...
![](https://img-blog.csdnimg.cn/0ba2a0a0d4634721af4d9a940f32fcdc.png)
测试人员简单使用Jenkins
一、测试人员使用jenkins干什么? 部署测试环境 二、相关配置说明 一般由开发人员进行具体配置 1.Repository URL:填写git地址 2.填写开发分支,测试人员可通过相应分支进行测试环境的构建部署 当多个版本并行时,开发人员可以通过…...
![](https://img-blog.csdnimg.cn/5001a203ad0c4e85b73330f6e6c0dea4.png)
使用RecyclerView构建灵活的列表界面
使用RecyclerView构建灵活的列表界面 1. 引言 在现代移动应用中,列表界面是最常见的用户界面之一,它能够展示大量的数据,让用户可以浏览和操作。无论是社交媒体的动态流、商品展示、新闻列表还是任务清单,列表界面都扮演着不可或…...
![](https://www.ngui.cc/images/no-images.jpg)
linux ubuntu安装mysql
在 Ubuntu 上安装 MySQL 的步骤如下: 更新系统软件包列表: sudo apt update 安装 MySQL 服务器: sudo apt install mysql-server 安装完成,可以使用以下命令检查 MySQL 服务器是否正在运行: sudo systemctl status mysql 如果 MyS…...
![](https://www.ngui.cc/images/no-images.jpg)
计算机网络各层的功能以及常用协议
目录 1. 物理层(Physical Layer)2. 数据链路层(Data Link Layer)3. 网络层(Network Layer)4. 传输层(Transport Layer)5. 应用层(Application Layer) 计算机网…...
![](https://www.ngui.cc/images/no-images.jpg)
M. Minimal and Maximal XOR Sum 2023“钉耙编程”中国大学生算法设计超级联赛(7)hdu7359
Problem - 7359 题目大意:给出一个n个数的排列,可以将任意区间内的所有数头尾翻转,每次操作的费用等于区间长度,要求将其变成一个递增排列,求消耗费用的异或和的最小值和最大值 1<n<1e5 思路:操作…...
![](https://www.ngui.cc/images/no-images.jpg)
C++基础篇(五)内存模型及详细示例
目录 一、内存分区模型二、内存分区代码示例三、new 运算符详解 一、内存分区模型 C程序在运行时,将内存分为四个区域,不同的区域赋予不同的生命周期,以提供强大的灵活编程。 代码区:存储程序的二进制代码,通常是只读…...
![](https://img-blog.csdnimg.cn/775632765b6744fbbecbd8fdd097d1ab.png)
基于 JMeter API 开发性能测试平台
目录 背景: 常用的 JMeter 类和功能的解释: JMeter 编写性能测试脚本的大致流程示意图: 源码实现方式: (1) 环境初始化 (2) 环境初始化 (3) 创建测试计划 (4) 创建 ThreadGroup (5) 创建循环控制器 (6) 创建 Sampler (…...
![](https://img-blog.csdnimg.cn/3c8e59711dd54bb2a190e0f0992bb122.png)
HBase-写流程
写流程顺序正如API编写顺序,首先创建HBase的重量级连接 (1)读取本地缓存中的Meta表信息;(第一次启动客户端为空) (2)向ZK发起读取Meta表所在位置的请求; (…...
[mongo]应用场景及选型
应用场景及选型 MongoDB 数据库定位 OLTP 数据库横向扩展能力,数据量或并发量增加时候架构可以自动扩展灵活模型,适合迭代开发,数据模型多变场景JSON 数据结构,适合微服务/REST API基于功能选择 MongoDB 关系型数据库迁移 从基…...
![](/images/no-images.jpg)
学院网站建设情况/软件开发培训多少钱
文章目录 项目介绍实现过程1、构建网络2、查看每层名称3、查看指定层的权值4、特征图绘制项目介绍 在网络训练过程中,我们经常需要查看某层权重的变化过程,这其实只需要简单的 API 就能实现。 为了方便演示,我们使用迁移学习到的 MobileNet V2 网络。 实现过程 1、构建网…...
![](/images/no-images.jpg)
ubuntu做的网站架构/天猫关键词排名怎么控制
一. 荣辱不惊每个成功的人, 在别人赞美你的时候, 千万不要沾沾自喜! 因为接下来的就是对你的辱骂。中国的100%媒体和99.99%的网友都是没有脑袋的机构和动物。可以肯定的说, 每个成功的经理人后面都有一群“小人”,他们时刻想毁灭你, 无论是比尔盖茨, 还是张瑞敏&…...
![](https://s1.51cto.com/images/20180117/1516171561377425.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
郑州网站建设汉狮/seo公司是做什么的
自动发现与自动注册简介自动发现:zabbix Server主动发现所有客户端,然后将客户端登记自己的小本本上,缺点zabbix server压力山大(网段大,客户端多),时间消耗多。自动注册:zabbix age…...
![](https://img-blog.csdnimg.cn/2020060822165643.jpg?x-oss-process=,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NoaW5lZg==,size_16,color_FFFFFF,t_70#pic_center)
电脑经销部开具网站建设费/服务营销理论
第193场周赛[1480. 一维数组的动态和](https://leetcode-cn.com/problems/running-sum-of-1d-array/)题目描述1Solution1[1481. 不同整数的最少数目](https://leetcode-cn.com/problems/least-number-of-unique-integers-after-k-removals/)题目描述2Solution2[1482. 制作 m 束…...
![](/images/no-images.jpg)
类似于众人帮的做任务赚佣金网站/友情链接交换要注意哪些问题
要在 Java 中获取字符串的编码格式,您可以使用 Java 的 Charset 类。您可以通过以下方式获取字符串的编码: String str "your string"; Charset charset Charset.forName("UTF-8"); System.out.println(charset.displayName());其中…...
![](https://img-blog.csdnimg.cn/2022010705085577600.png)
网站设计 网站建设 手机网站建设/长沙网站制作推广
SA12226242 施健 信息安全 导读 在深入理解Linux之前,我们需要了解计算机是如何工作的。使用Example的c代码分别生成.cpp,.s,.o和ELF可执行文件,并加载运行,分析.s汇编代码在CPU上的执行过程。 一、C语言的编译过程 1.1 C语言的编译过程 由于…...