设计模式完整备忘录

小言:这不是设计模式讲解型博文,以下将设计模式的概述、类图,代码示例,总结分每篇博文单独展示,现将其归类,便于以后翻阅,设计模式也不是一两个月学完了就能完全领悟,它只告诉我们几个解决问题的思路和方法,将具体问题抽象为模型的思想,武功也是,套路需要学,但是基本功(如马步、力量,毅力,抗打击能力)绝对不可或缺,在学习设计模式的同时更需要看看数据结构和算法方面的基础东东。设计模式不是银弹,如果非要用降龙十八掌对付一只蚂蚁不是一个好想法。本人也是学艺不精,整理当中难免有错误,希望在大家的批评指正,共同进步。

一、创建型模式                                                                                          

  • 工厂方法(FactoryMethod)

           定义一个用于创建对象的接口,让子类决定实例化哪一个类。

           FactoryMethod使一个类的实例化延迟到其子类。

  • 抽象工厂(AbstractFactory)

         提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

  • 建造者(Builder)

         将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

  • 单例模式(Singleton)

         保证一个类仅有一个实例,并提供一个访问它的全局访问点。

  • 原型模式(Prototype)

          用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

二、结构型模式                                                                                          

  • 适配器模式(Adapter)

          将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本

          由于接口不兼容而不能一起工作的那些类可以一起工作。

  • 桥接模式(Bridge)

          将抽象部分与它的实现部分分离,使它们都可以独立地变化。

  • 组合模式(Compsite)

          将对象组合成树形结构以表示"部分-整体"的层次结构。

          "Composite使得用户对单个对象和组合对象的使用具有一致性。"

  • 装饰模式(Decorator)

          动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活

  • 外观模式(Facade)

         为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,

         这个接口使得这一子系统更加容易使用。

  • 享元模式(Flyweight)

          运用共享技术有效地支持大量细粒度的对象。

  • 代理模式(Proxy)

          为其他对象提供一种代理以控制对这个对象的访问。

二、行为型模式                                                                                           

  • 责任链模式(Chain Of Responsibility)

         使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。

         将这些对象连成一条链, 并沿着这条链传递该请求,直到有一个对象处理它为止。

  • 命令模式(Command)

          将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;

          对请求排队或记录请求日志,以及支持可撤消的操作。

  • 解释器模式(Interpreter)

          给定一个语言,定义它的文法的一种表示,并定义一个解释器,

          这个解释器使用该表示来解释语言中的句子。

  • 迭代器模式(Iterator)

          提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。

  • 中介者模式(Mediator)

          用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,

          从而使其耦合松散,而且可以独立地改变它们之间的交互。

  • 备忘录模式(Memento)

          在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

          这样以后就可将该对象恢复到原先保存的状态。

  • 观察者模式(Observer)

         定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,

         所有依赖于它的对象都得到通知并被自动更新。

  • 状态模式(State)

          当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

  • 策略模式(Strategy)

          定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。

          本模式使得算法可独立于使用它的客户而变化。

  • 模板方法(TemplateMethod)

          定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。

          TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

  • 访问者模式(Visitor)

          表示一个作用于某对象结构中的各元素的操作。

          它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

附上每一个模式的代码示例,每一种模式示例代码都通过调试,调试环境vs2010

下载地址:http://files.cnblogs.com/jqbird/DesignPatternLab.rar

转载于:https://www.cnblogs.com/jqbird/archive/2011/09/08/2171198.html

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

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

相关文章

使用Microsoft Web Application Stress Tool对web进行压力测试

你的Web服务器和应用到底能够支持多少并发用户访问?在出现大量并发请求的情况下,软件会出现问题吗?这些问题靠通常的测试手段是无法解答的。本文介绍 了Microsoft为这个目的而提供的免费工具WAS及其用法。另外,本文介绍了一种Web应…

2021前端高频面试题整理,附答案

大家好,我是若川。最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12若川视野原意是若川的前端视野。但太长了就留下了四个字,不知道的以为关注的不是技术公众号。今天分享一篇慕课网精英讲师河畔一角的好文章~废话不多说,…

OO第二单元作业小结

总结性博客作业 第一次作业 (1)从多线程的协同和同步控制方面,分析和总结自己三次作业的设计策略。 第一次作业为单电梯傻瓜调度,可以采用生产者——消费者模型,是一个有一个生产者(标准输入电梯请求),一个…

dribbble加速vpn_关于Dribbble设计的几点思考

dribbble加速vpn重点 (Top highlight)I’d like to start with the following quote from Paul Adam’s “The Dribbbilisation of Design,” a powerful read that examines the superficiality of modern product design portfolios, often containing Dribbble posts that l…

JS Compress and Decompress

<html><head><title>JavaScript字符串之压缩与还原</title><meta http-equiv"Content-Type"content"text/html; charsetutf-8"/><script type"text/javascript"><!--/** * 压缩 */functionCompress(strN…

尤雨溪推荐神器 ni ,能替代 npm/yarn/pnpm ?简单好用!源码揭秘!

1. 前言大家好&#xff0c;我是若川。最近组织了源码共读活动&#xff0c;感兴趣的可以加我微信 ruochuan12想学源码&#xff0c;极力推荐之前我写的《学习源码整体架构系列》jQuery、underscore、lodash、vuex、sentry、axios、redux、koa、vue-devtools、vuex4、koa-compose、…

如何了解自己的认知偏差_了解吸引力偏差

如何了解自己的认知偏差Let me introduce you the attractiveness bias theory known as cognitive bias.让我向您介绍称为认知偏差的吸引力偏差理论。 Think about a person with outstanding fashion. It will draw our attention, and maybe encourage us to interact with…

隐马尔可夫模型(HMM)及Viterbi算法

HMM简介 对于算法爱好者来说&#xff0c;隐马尔可夫模型的大名那是如雷贯耳。那么&#xff0c;这个模型到底长什么样&#xff1f;具体的原理又是什么呢&#xff1f;有什么具体的应用场景呢&#xff1f;本文将会解答这些疑惑。  本文将通过具体形象的例子来引入该模型&#xf…

尤大直播分享:vue3生态进展和展望

大家好&#xff0c;我是若川。最近组织了源码共读活动&#xff0c;感兴趣的可以加我微信 ruochuan12前言10月23日&#xff0c;参加了前端早早聊组织的【vue生态专场】&#xff0c;准备写一波分享方便大家学习。早上有4个话题&#xff1a;volar开发&#xff0c;搭建平台组件开发…

利用Python查看微信共同好友

思路 首先通过itchat这个微信个人号接口扫码登录个人微信网页版&#xff0c;获取可以识别好友身份的数据。这里是需要分别登录两人微信的&#xff0c;拿到两人各自的好友信息存到列表中。 这样一来&#xff0c;查共同好友就转化成了查两个列表中相同元素的问题。获取到共同好友…

女生适合学ux吗_UX设计色彩心理学,理论与可访问性

女生适合学ux吗Colour is an interesting topic, which I feel is often overlooked and sometimes under-appreciated. One of the first things I was taught was the power of colour, how it can have an impact on human emotion, and that there should be purpose behin…

初学者也能看懂的 Vue2 源码中那些实用的基础工具函数

1. 前言大家好&#xff0c;我是若川。最近组织了源码共读活动&#xff0c;感兴趣的可以加我微信 ruochuan12想学源码&#xff0c;极力推荐之前我写的《学习源码整体架构系列》jQuery、underscore、lodash、vuex、sentry、axios、redux、koa、vue-devtools、vuex4、koa-compose、…

清除浮动mini版

1&#xff09; 清除浮动mini版(简约而不简单).clr:after { content:"";display:table;clear:both;}.clr{zoom:1;} 转载于:https://www.cnblogs.com/jinbiao/archive/2011/09/26/2191170.html

Fiddler 十分钟最全使用介绍

Wireshark 、HTTPWatch、Fiddler的介绍 Firebug虽然可以抓包&#xff0c;但是对于分析http请求的详细信息&#xff0c;不够强大。模拟http请求的功能也不够&#xff0c;且firebug常常是需要“无刷新修改”&#xff0c;如果刷新了页面&#xff0c;所有的修改都不会保存。Wiresha…

视觉测试_视觉设计流行测验

视觉测试重点 (Top highlight)I often discuss the topic of improving visual design skills with junior and mid-level designers. While there are a number of design principles the designers should learn and practice, one important skill that is not often consid…

如何给开源项目提过 PR 呢?其实很简单

大家好&#xff0c;我是若川。最近组织了源码共读活动&#xff0c;感兴趣的可以加我微信 ruochuan12源码共读群里有小伙伴聊到如何给开源项目提PR&#xff0c;所以今天分享这篇文章。你有给开源的库或者框架提过 PR 吗&#xff1f;如果没有&#xff0c;那么今天的文章会教你怎么…

一次回母校教前端的经历

大家好&#xff0c;我是若川。最近组织了源码共读活动&#xff0c;感兴趣的可以加我微信 ruochuan12已进行了三个月&#xff0c;很多小伙伴都表示收获颇丰。分享一篇武大毕业的耀耀大佬的文章。有些时候会受限于环境影响&#xff0c;特别是在校大学生。所以要融入到积极上进的环…

设计插画工具_5个强大的设计师插画工具

设计插画工具As Product Designers, most likely, we have come across illustrative work. Visual design is one important element in enhancing the user experience. As many gravitate toward attractive looking products, designers are also adapting to the changing…

如何才能更合理地分配项目奖金?

项目奖金通常情况下都是属于基本工资之外的一种绩效奖励&#xff0c;也就是说&#xff0c;它在员工的薪酬中&#xff0c;是属于浮动的那一部分收入&#xff0c;而不是一种固定收入。基于这样一种认知&#xff0c;跟大家讨论下如何才能更合理地进行项目奖金的分配&#xff1f; 首…

Codeforces 741 D - Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths

D - Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths 思路&#xff1a; 树上启发式合并 从根节点出发到每个位置的每个字符的奇偶性记为每个位置的状态&#xff0c;每次统计一下每个状态的最大深度 为了保证链经过当前节点u&#xff0c;我们先计算每个子树的答案…