设计模式总结

2023年05月21日18:17:36

设计模式分类

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式、简单工厂模式。

结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

设计模式索引

单例模式

代理模式

简单工厂模式

工厂方法模式

抽象工厂模式

建造者模式

装饰者模式

适配器模式

桥接模式

观察者模式

外观模式

享元模式

组合模式

原型模式

中介者模式

策略模式

模板方法模式

状态模式

备忘录模式

命令模式

迭代器模式

责任链模式

访问者模式

解释器模式

设计模式六大原则

由于博主水平有限,如果本文有什么错漏,请不吝赐教

感谢阅读,如果您觉得本文对你有帮助的话,可以点个推荐

本文转载于网络 如有侵权请联系删除

相关文章

  • 【网页设计】基于HTML在线图书商城购物项目设计与实现

    ✍️作者简介:一个热爱把逻辑思维转变为代码的技术博主 ?作者主页:【主页——?获取更多优质源码】?web前端期末大作业:【?毕设项目精品实战案例(1000套)】?程序员有趣的告白方式:【?HTML七夕情人节表白网页制作(110套)】?超炫酷的Echarts大屏可视化源码:【?echarts大屏展示大数据平台可视化(150套)】?免费且实用的WEB前端学习指南:【?web前端零基础到高级学习视频教程120G干货分享】?关于作者:历任研发工程师,技术组长,教学总监;曾于2016年、2020年两度荣获CSDN年度十大博客之星。十载寒冰,难凉热血;多年过去,历经变迁,物是人非。然而,对于技术的探索和追求从未停歇。?坚持原创,热衷分享,初心未改,继往开来!一、?‍?网站题目?校园网页设计、学校班级网页制作、学校官网、小说书籍、等网站的设计与制作。二、✍️网站描述?️HTML静态网页设计作业使用dreamweaver制作,采用DIV+CSS布局,共有多个页面,首页使用CSS排版比较丰富,色彩鲜明有活力。顶部导航及底部区域背景色为100%宽度,主体内容区域宽度?一套优质的?网页设计应该包含(具体可根

  • 编程干货|九年工作经历的老程序员,浏览器收藏夹里竟然有这种网站?

    Hello,大家好,我是浩说偶遇一位来自CSDN的9年资深程序员大佬下面是这位大佬经过9年的工作经历中收集到的一些超实用干货网站分享给大家!希望对大家的工作和学习能有所帮助!在线编译工具菜鸟工具菜鸟的优势就是在于他是一款非常的全面的编译工具套装各种语言的在线运行。传送门:https://c.runoob.com/CODEPENCodepan是一款前端开发工具,你可以在上面练手、写demo、测试等都可以,做一些小型的调试和展示的时候还是非常有用的。传送门:https://codepen.ioDooccn这也是款非常优秀的在线编译器,对比菜鸟,虽然没有那么全面,但Dooccn页面更为简洁,操作起来更为得心应手。传送门:http://www.dooccn.com/c/好东西当然要分享转发走起来画图工具ProcessOn首先给大家推荐的工具是ProcessOn在线画图工具。程序员一般接触的流程图、思维导图、原型图、uml图、网络拓展图、组织结构等等,他都能轻易绘制,而且还有大量的模板免费提供使用!老码也经常用这个来制作学习流程图。传送门:https://www.processon.com/DR

  • php判断电子邮件是否正确方法

    PHP判断电子邮件是否正确即是否有效,是我们PHP面试过程中常见考题之一。我们可以使用PHP过滤器来实现判断。下面我们就通过具体示例,给大家介绍PHP判断电子邮箱是否正确的简单实现方法。代码如下:<?php $email="demo@example.com"; if(filter_var($email,FILTER_VALIDATE_EMAIL)) { echo'"'.$email.'"是有效的。'; } else { echo'"'.$email.'"是无效的。'; }复制我们使用FILTER_VALIDATE_EMAIL过滤器验证电子邮件地址,这里我们要判断demo@example.com这个邮件是否有效。前台访问结果如下:那么我们再随便输入一个值:rtgdrgdth555。判断结果如下:filter_var()函数使用指定的过滤器过滤变量。filter_var()函数语法:mixedfilter_var(mixed$variable[

  • 七日Python之路--第十二天(Django Web 开发指南)

    《DjangoWeb开发指南》。貌似使用Django1.0版本,基本内容差不多,细读无妨。地址:http://www.jb51.net/books/76079.html (一)第一部分入门(1)内置数字工厂函数int(12.34)会创建一个新的值为12的整数对象,而float(12)则会返回12.0。(2)其他序列操作符连接(+),复制(*),以及检查是否是成员(in,notin)'**'.join('**')或'***%s***%d'%(str,int)(3)生成器表达式even_number=(xforxinrange(1000)ifx%2==0)复制(4)元组tuple=('',)#空元组定义(5)enumerate能让你同时迭代和计数的函数fori,valueinenumerate(data): printi,value复制(6)匿名函数sum=lambdax,y:x+y sum(a,b)复制(7)函数装饰器!!! 以‘@’开头,对函数进行‘包装’(8)*args和**kwargs*args:元组或

  • 新冠病毒已突变,演化出2个亚型,影响到底有多大?

    十三发自凹非寺量子位报道|公众号QbitAI 新冠病毒突变了,演化出了2个亚型。 这项研究对103个新冠病毒全基因组分子(目前为止最大规模)进化了分析,发现病毒株已发生了149个突变点,而且多数是近期产生。 研究还指出,新冠病毒已经演化出L和S两个亚型。从占比上来看,L亚型更为普遍达到70%,S亚型占30%。其中,L亚型可能更具侵略性传染力。 这项研究一时间成为了大家关注的焦点,直冲知乎热榜第三,热度达到了2966万。 这项来自中国科研团队,3日发表于《国家科学评论》(NationalScienceReview)。 △《关于SARS-CoV-2的起源和持续进化》 那么,这到底是是怎么一回事?是否会让疫情变得更加严重呢? 病毒演化出2个亚型,L亚型可能传染力更强 这项研究共选取了103个病毒基因组序列,来源为GISAID和GenBank等。 在进一步分析了这些病毒基因组后,共发现149个突变位点,其中包括43个同义突变(synonymousmutation)和83个错义突变(nonsynonymousmutation)。 △103种SARS-CoV-2病毒衍生突变的频谱 研究发现70%的

  • SpringBoot测试Service或者Dao层

    使用SpringBoot进行单元测试时,发现使用@Autowired注解的类无法自动注入,当使用这个类的实例的时候,报出NullPointerException,即空指针异常。SpringBoot中的单元测试先简单说一下SpringBoot中的单元测试。要在SpringBoot中使用单元测试是很简单的,SpringBoot提供了spring-boot-starter-test的依赖,即JUnit的相关依赖。在pom.xml文件中引入依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency>复制单元测试的语法也很简单,使用@Test注解在方法上或在类上就可以进行简单的单元测试了。publicclassaquanTest{ @Test publicvoidtestOne(){ System.out.println("我是一个

  • 「译」利用 JavaScript 复制文本到剪贴板

    一个小小的诀窍。实现主题的复制代码功能时,思路刚好和这篇文章差不多,不过这篇文章的代码要更加合理。原文地址:CopyingtexttoclipboardwithJavaScript原文作者:AngelosChalaris译者:Chor本文将会深入介绍30秒代码中copyToClipboard代码块的工作原理。你可以在项目仓库中找到它的源代码以及更多其他的实用方法。30秒代码:可以在30秒或更短时间内理解的JavaScript代码块核心功能搭建网站时经常会遇到一个需求,那就是在用户没有选中或者使用键盘组合键的情况下,复制文本到剪贴板。JavaScript可以用短短五步轻松解决这个问题:1.创建一个稍后将插入到文档中的<textarea>元素。将我们想要复制到剪贴板的字符串设置为它的value。 2.将上诉<textarea>元素插入到当前的HTML文档中。 3.使用HTMLInputElement.select()选中<textarea>元素的内容。 4.使用Document.execCommand('copy')复制<tex

  • mysql事务

    mysql事务查询select@@global.tx_isolation;、事务隔离级别ANSI/ISOSQL标准定义了4中事务隔离级别:未提交读(readuncommitted),提交读(readcommitted),重复读(repeatableread),串行读(serializable)。对于不同的事务,采用不同的隔离级别分别有不同的结果。不同的隔离级别有不同的现象。主要有下面3种现在:1、脏读(dirtyread):一个事务可以读取另一个尚未提交事务的修改数据。2、非重复读(nonrepeatableread):在同一个事务中,同一个查询在T1时间读取某一行,在T2时间重新读取这一行时候,这一行的数据已经发生修改,可能被更新了(update),也可能被删除了(delete)。3、幻像读(phantomread):在同一事务中,同一查询多次进行时候,由于其他插入操作(insert)的事务提交,导致每次返回不同的结果集。不同的隔离级别有不同的现象,并有不同的锁定/并发机制,隔离级别越高,数据库的并发性就越差,4种事务隔离级别分别表现的现象如下表:隔离级别脏读非重复读幻像读readu

  • 第83节:Java中的学生管理系统分页功能

    第83节:Java中的学生管理系统分页功能 分页功能一般可以做成两种,一种是物理分页,另一种是逻辑分页。这两种功能是有各自的特点的,物理分页是查询的时候,对数据库进行访问,只是查一页数据就进行返回,其特点是对内存中数据量存储不大,只是缺点就是要对数据库不断的进行访问;而对逻辑分页来说,就有所不同,它是一下子就把所有的数据全部查询出来,然后放入到内存中,访问速度快,缺点就是对内存空间不足,数据量过大。select*fromstulimit5;复制效果//offset偏移前面的多少条,offset1跳过前面的一条 select*fromstulimit5offset5;复制效果SELECT*FROMstuLIMIT5,5;复制效果SELECT*FROMstuLIMIT5,2;复制SELECT*FROMstuLIMIT2,5;复制效果写分页的dao模式 //index.jsp <h3><ahref="StudentListPageServlet?currentPage=1">分页显示所有学生</a></h3>复制//Stud

  • CentOS 7 配置php语言开发环境

    CentOS7配置php语言开发环境初始化设置参考:http://blog.csdn.net/wh211212/article/details/52923673 安装PHP5.6可以从CentOSSCLo软件集进行安装。即使安装了5.4,因为5.6位于另一个PATH上也是可以安装的。 #installfromSCLo [root@linuxprobe~]#yum--enablerepo=centos-sclo-rh-yinstallrh-php56复制加载环境变量#loadenvironmentvariables [root@linuxprobe~]#sclenablerh-php56bash [root@linuxprobe~]#php-v PHP5.6.5(cli)(built:Mar23201619:17:38) Copyright(c)1997-2014ThePHPGroup ZendEnginev2.6.0,Copyright(c)1998-2014ZendTechnologies [root@linuxprobe~]#whichphp /opt/rh/rh-php56/ro

  • day09-Tomcat01

    Tomcat01 1.WEB开发介绍 WEB,在英文中WEB表示网/网络资源,它用于表示WEB服务器(主机)供浏览器访问的资源 WEB服务器(主机)上供外界访问的Web资源为: 静态web资源(如html页面):指web页面中供人们浏览的数据始终是不变的 动态web资源,比如Servlet、PHP等 静态web资源开发技术:HTML,CSS,JS等 常用动态web资源开发技术:Servlet,SpringBoot,SpringMVC,PHP,ASP.NET等 BS开发和CS开发: 1.1BS开发 B:browser(浏览器) S:Server(服务端) 对BS的解读: 兼容性: 因为浏览器的种类很多,编写的程序可能在一个浏览器上面是正常的,在另一个浏览器上面就会出现问题 安全性: 通常情况下,BS的安全性不如CS好控制 易用性:BS好于CS,浏览器电脑有 扩展性:BS相对统一,只需要写Server端 1.2CS开发 C:Client(客户端) S:Server(服务端) 2.JavaWeb服务软件 2.1JavaWeb服务器软件介绍 学习JavaW

  • svn更新产生的异常

    同步svn时差生的错误如下:   同步SVNStatusSubscriber时报告了错误。1中的0个资源已经同步。 同步/tunnel14时发生错误:ErrorgettingstatusforresourceP/org.tigris.subversion.javahl.ClientException:svn:cannotreadHTTPstatusline svn:PROPFINDrequestfailedon'/code/repo/current_projectstrunk' ErrorgettingstatusforresourcePtrunk' org.tigris.subversion.javahl.ClientException:svn:cannotreadHTTPstatusline svn:PROPFINDrequestfailedon'/code/repo/current_projects/e/trunk' org.tigris.subversion.javahl.ClientException:svn:cannotreadHTTPstatusline svn

  • 复习FBV与CBV

    在学习DRF之前~我们要先复习一些知识点~~ FBV和CBV 学习Django的时候~我们已经学习过了CBV以及FBV~~我们来复习一下~~ 什么是FBV和CBV呢~~   FBV基于函数的视图   CBV基于类的视图 也就是说我们是用函数编写视图~还是类编写视图~~我们来看下两个的简单实现~~ urlpatterns=[ path('admin/',admin.site.urls), path('test_fbv',test_fbv), path('test_cbv',TestCBV.as_view()) ]复制 deftest_fbv(request): returnHttpResponse("ok") classTestCBV(View): defget(self,request): returnHttpResponse("ok")复制 我们可以看到,我们的CBV首先执行了as_view()方法,那我们看下我们这个方法里做了什么~ 我们可以看出~CBV在内部做了一个分发~本质和FBV是一样的~~ 以后做接口开发的时候,我们就要用CBV,我们之前学了restful规

  • 如何用堆栈和循环结构代替递归调用--递归转换为非递归的10条军规

    10Rules(steps)forreplacingtherecursivefunctionwithstackandwhile-loop 转自http://www.codeproject.com/Articles/418776/How-to-replace-recursive-functions-using-stack-and   Firstrule 定义一个新的数据结构"Snapshot".他的作用是保存队规过程中的中间值数据和状态信息。  "Snapshot"结构中包含: 递归函数的参数,但是,如果递归函数的参数是引用类型的参数,则无需放到Snapshot 中.因此,实例如下,参数n 应该放在Snapshot 中,而引用类型的参数 retVal 不放Snapshot 中. voidSomeFunc(intn,int&retVal); 递归的条件分类值"Stage" (通常是一个int 值,可以放在switch语句中,分别处理不同的情况) 细节参照第六条si

  • 爱喝「肥宅快乐水」的班长

    爱喝「肥宅快乐水」的班长 太菜了==,签到题看半天不会=== 可以用插板法 写了个dp 一共需要买$n$ 瓶饮料。而在云闪付在线商城上,一共有$m$ 种不同的饮料(包括「肥宅快乐水」,并假设云闪付在线商城上的每种饮料的购买数量都没有限制)。由于码队的弟弟喜欢喝「肥宅快乐水」,所以这两名同学决定至少要买一瓶「肥宅快乐水」。 这样看来,饮料购买的方案实在是太多了!两位同学突发奇想,想让你帮忙计算:总共有多少种购买饮料的方案。(答案对$10^9+7$ 取模,同种饮料都是一样的,不作区分。) #include<bits/stdc++.h> typedeflonglongll; #definePpair<ll,ll> #definesc(x)scanf("%lld",&x); usingnamespacestd; #defineendl'\n' #defineread(A)for(inti=0;i<n;i++)scanf("%lld",&A[i]); #definemaxn100005 intN,T; constllm

  • windows部署NTP服务器

    1、打开注册表编辑器,依次展开\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 2、在 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config 这样强制该主机将它自身宣布为可靠的时间源从而使用内置的CMOS时钟,原先的a代表采用外面的时间服务器 3、以管理员身份打开命令行,执行命令 netstopw32time&&netstartw32time复制 也就是先停止再启动w32time服务 4、在命令行中执行services.msc命令执行打开服务管理单元,设置W32Time服务启动模式为自动   5、NTP服务的端口是123,使用的UDP,如果启用防火墙,则允许udp123端口访问 打开命令行,执行以下命令添加规则 netshadvfirewallfirewalladdrulename=NTPSERVERdir=inaction=allowp

  • HBase框架学习之路

    1背景知识 1.1解决问题 解决HDFS不支持单条记录的快速查找和更新的问题。 1.2适用情况 存在亿万条记录的数据库,只有千万或者百万条记录使用RDBMS更加合适 确保你的应用不需要使用RDBMS的高级特性(第二索引,事务机制,高级查询语言等) 足够的硬件配置,即节点数,HDFS在少于5个节点时并不会表现得很好,HBase也存在相同情况。 2设计理念 2.1概述 2.1.1简介 使用Java语言开发的NoSQL类型的分布式数据库 不支持RDBMS的一些高级特性,如事务机制,第二索引,高级查询语言等 支持线性和模块化扩展,可以通过在商用机器上增加RegionServer来线性提高性能 2.1.2HBase特性: 强读写一致性:适合高速计数聚合操作 自动切分数据:分布式存储数据,随着数据增长进行自动切片 RegionServer自动失效备援 与HDFS集成 支持MapReduce执行大规模并行操作 提供JavaClientAPI 提供Thrift/RESTAPI 针对大容量查询优化的块缓存和BloomFliter 可视化管理界面 2.1.3劣势 WAL的重新执行速度缓慢 故

  • P3594 [POI2015]WIL-Wilcze doły

    \(O(n^3)\)暴力 比较好写 for(inti=d;i<=n;++i) for(intj=1;j<=i-d+1;++j) for(intk=j;k<=i-d+1;++k) if(sum[i]-sum[j-1]-(sum[k+d-1]-sum[k-1])<=p) ans=max(ans,i-j+1); 复制 \(O(n^2)\)尺取法优化选择 for(inti=1;i<=n;++i){ s+=w[i]; if(i-l+1<=d){ ans=max(ans,i-l+1);continue; } if(s>p){ boolflag=false; for(intj=l;j<=i-d+1;++j){//寻找可以改变的左端点 if(s-(sum[j+d-1]-sum[j-1])<=p){ flag=true; ans=max(ans,i-l+1); } } if(!flag)s-=w[l++];//弹队头 } } 复制

  • springCloud五大组件

        (1)服务发现--NetflixEureka     由两个组件组成:Eureka服务端和Eureka客户端         Eureka服务端用作服务注册中心,支持集群部署           工作原理:在应用启动时,Eureka客户端向服务端注册自己的服务信息,同时将服务端的服务信息缓存到本地。客户端会和服务端进行周期性的进行心跳交互进行更新服务信息。      (2) 客户端负载均衡--NetflixRibbon     提供客户端的软件负载均衡算法。它基于Http和Tcp的客户端负载均衡,使得面向REST请求时变换为客户端的负载服务调用。      (3)熔断器--NetflixHystrix      &

  • 设计师升职加薪必须知道的10个设计网站

    设计行业经过几年的发展,已经进入到了相对成熟的时期。这无疑会对设计师有更高的要求和挑战。 随着AI的发展,设计甚至从有形的设计,转变为无形的设计。这就需要你对设计有更深刻的理解,理解设计的本质是沟通,设计源于人对美的追求,对好的体验的追求,不然常常被人误解。 但是但是,这跟升职加薪有啥关系呢?设计工作是一个过程,任何工作都是,只要你认真理解每份工作的意义,那么付出一定会有所回报。 小编给大家整理了10个有助于升职加薪的设计网站,掌握这10个网站让你升职加薪更轻松。 1、VEER Veer是一家免版税、国际化的图片提供商,内容源于微利图库鼻祖iStock,在线提供数亿张优质图片素材,包含图片、插画、矢量图等,并结合搜索人工智能,为用户带来极致的搜索体验,购图更简单! 目前拥有来自全球25万供图者,每天都有近10万张图片入库。并且,只有在这里,你才找得到独家的优质高性价比以及版权保障的图片素材哦! 为扶持中小微企业,特申请上线的订阅模式价格低至3元/张,包年用户还可获得子账号功能便于公司内部用图管理、免费下载大尺寸高清小样图、免费API接入等特权。 网址:https://www.veer

  • Python实现BP神经网络实现对公路客运量

    BP算法 求解参数w的算法,神经网络的基础,权重的学习算法都是BP学习算法 信号“正向传播(FP)”求损失,“反向传播(BP)”回传误差;根据误差值修改每层的权重,继续迭代 输出层误差 O代表预测结果,d代表真实结果;系数是为了方便求导时计算 隐层的误差 netk是当前神经元的wx的结果;f(net)是激活函数,yj代表上一层隐层的输出值 输入层误差 推导过程 Python实现BP神经网络实现对公路客运量 importnumpyasnp importmatplotlibasmpl importmatplotlib.pyplotasplt importpandasaspd fromsklearn.preprocessingimportMinMaxScaler ''' Python实现BP神经网络实现对公路客运量 ''' ##设置字符集,防止中文乱码 mpl.rcParams['font.sans-serif']=[u'simHei'] mpl.rcParams['axes.unicode_minus']=False data=pd.read_csv('traffic_d

相关推荐

推荐阅读