关于.NET 设计模式 思维导图

    背景说明

    以前都在匆匆忙忙写代码,在无穷无尽的需求中间左冲右突,最近终于有一些闲暇的时间,来总结和思考编程中的一些核心思想,磨刀不误砍柴的功夫,期望通过总结和学习,能够在编程设计上能够有更进一步的提升。

    回看设计模式

    这些设计模式,都来源于生活,都是将生活中一些实际场景,应用在编程当中,以解决编程当中遇到的不同问题,使得思路更容易理解、更方便阅读。如果我们是一个对编程有想法、遇到过实际难题的人,我们或许也能设计出属于自己的“设计模式”!

    还是先发个照,纪念一下归纳出23种设计模式的四位前辈。在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素) 的书,该书首次提到了软件开发中设计模式的概念。四位作者合称 GOF(四人帮,全拼 Gang of Four)。他们所提出的设计模式主要是基于以下的面向对象设计原则。

           ▣ 对接口编程而不是对实现编程。

           ▣ 优先使用对象组合而不是继承。

    下面是25种设计模式的特征、类型、应用场景等,之所以列出英文,因很多情况下,看到英文,就能联想到自己见过的一些类:

  • 设计模式的分类
    1.1.创建型设计模式

    1.1.1.单例模式(Singleton Pattern)

    特征:

    全局只有一个实例

    必须自己创建自己的唯一实例

    类型:

    懒汉式

    饿汉式

    双检锁

    登记式

    1.1.2.工厂模式(Factory Pattern)
    类型:

    简单工厂模式



    工厂方法模式



    抽象工厂模式

    场景:

    创建相似对象

    角色

    AbstractFactory:抽象工厂角色

    ConcreteFactory:具体工厂角色

    AbstractProduce:抽象产品角色

    ConcreteProduce:具体产品角色

    区别:用生产鼠标作例子,试图理解其区别

    简单工厂模式

    产品清单:本厂专业生产罗技品牌的有线鼠标、机械鼠标,欢迎随时预定

    客户需求:

    客户:我要罗技机械鼠标

    工厂:好的,我有现成的

    三个月后...

    客户:我要罗技无线鼠标

    工厂:也可以,我先改造我的生产技术和设备先....

    设备升级中...

    工厂:好了,现在我能生产罗技品牌的有线鼠标、机械鼠标、无线鼠标,有需要随时找我

    客户:不好意思,我想再要一批罗技智能鼠标

    工厂:......

    工厂方法模式

    产品清单:我们提供罗技鼠标和双飞燕鼠标的专业生产能力,下属两个大厂,一个厂专门生产罗技鼠标,一个厂专门生产双飞燕鼠标

    客户需求:

    客户:我要罗技鼠标

    我:好的,我让罗技工厂做好后发货给你

    客户:我要双飞燕鼠标

    我:好的,我让双飞燕工厂马上进行生产

    客户:我要雷蛇鼠标

    我:......好的,我先去贷款建个厂先...

    抽象工厂模式

    产品清单:我厂提供双飞燕鼠标、键盘等双飞燕旗下产品的委托生产制造

    客户需求:

    客户:我要双飞燕鼠标

    工厂:好的,我联系双飞燕工厂,做完后发货过来

    客户:我要双飞燕键盘

    工厂:好的,我联系双飞燕工厂,做完后发货过来

    客户:我要罗技音响

    工厂:不好意思,我们暂时和罗技厂商那边还没有取得合作关系,不过我有双飞燕生产的音响,您需要吗?

    客户:不,我就要罗技音响....

    工厂:额...我们后期也会考虑和罗技进行合作的

    客户:你们没有办法自己生产罗技音响吗?

    工厂:抱歉,我们只是抽象工厂,没有实际的产能,只能联系实体工厂那边进行生产的

    1.1.3.建造者模式(Builder Pattern)

    类图:



    场景:创建复杂对象

    角色:

    Director:指挥者

    Client:客户端

    ConcreteBuilder:建造者

    Product:产品

    实例:

    比如StringBuilder,参考StringBuilder与建造者模式

    有一些编译器,也以Builder来命名,比如C++ Builder、PowerBuilder,由程序员指挥编译器,经过复杂的过程,生成编译文件。

    1.1.4.原型模式(Prototype Pattern)

    类图:



    场景:

    创建重复的对象,同时又能保证性能(安全执行 + 深度复制 + 快速反馈)

    当直接创建对象的代价比较大时,则采用这种模式

    角色:

    客户(Client):客户类提出创建对象的请求。

    抽象原型(Prototype):规定拷贝接口。

    具体原型(Concrete Prototype):被拷贝的对象。

    1.2.结构型

    1.2.1.适配器模式(Adapter Pattern)

    场景:

    实例:

    1.2.2.装饰器模式(Decorator Pattern)

    应用场景:

    应用实例:

    1.2.3.代理模式(Proxy Pattern)

    应用场景:

    应用实例:

    1.2.4.外观模式(Facade Pattern)

    应用场景:

    应用实例:

    1.2.5.桥接模式(Bridge Pattern)

    应用场景:

    应用实例:

    1.2.6.组合模式(Composite Pattern)

    应用场景:

    应用实例:

    1.2.7.享元模式(Flyweight Pattern)

    应用场景:

    应用实例:

    1.2.8.过滤器模式(Filter Pattern)

    应用场景:

    应用实例:

    1.3.行为型

    1.3.1.策略模式(Strategy Pattern)

    应用场景:

    应用实例:

    1.3.2.模板模式(Template Pattern)

    应用场景:

    应用实例:

    1.3.3.观察者模式(Observer Pattern)

    应用场景:

    应用实例:

    1.3.4.迭代器模式(Iterator Pattern)

    应用场景:

    应用实例:

    1.3.5.责任链模式(Chain of Responsibility Pattern)

    应用场景:

    应用实例:

    1.3.6.命令模式(Command Pattern)

    应用场景:

    应用实例:

    1.3.7.备忘录模式(Memento Pattern)

    应用场景:

    应用实例:

    1.3.8.状态模式(State Pattern)

    应用场景:

    应用实例:

    1.3.9.访问者模式(Visitor Pattern)

    应用场景:

    应用实例:

    1.3.10.中介者模式(Mediator Pattern)

    应用场景:

    应用实例:

    1.3.11.解释器模式(Interpreter Pattern)

    应用场景:

    应用实例:

    1.3.12.空对象模式(Null Object Pattern)

    应用场景:

    应用实例:

  • 思维导图

    后记

  • 源码下载及图片出处说明

    Github .NET 源码例子,会持续进行更新

    点此跳转到Github

    类图摘自于简书作者Whyn的系列文章中。

    思维导图是我自己所画,转载请注明出处。

  • 作者声明

    文章主要是我自己学习设计模式的总结,也期望给正在学习的伙伴带来帮助,不足之处,感谢留言指正。

    文章与源码例子会持续于本文中和Github仓库进行更新,仅此一篇,不会另写系列文章。

.NET 设计模式 思维导图的更多相关文章

  1. Head First Java设计模式思维导图总结

    关于Head First Java设计模式的思维导图总结:

  2. 15分钟带你了解前端工程师必知的javascript设计模式(附详细思维导图和源码)

    15分钟带你了解前端工程师必知的javascript设计模式(附详细思维导图和源码) 前言 设计模式是一个程序员进阶高级的必备技巧,也是评判一个工程师工作经验和能力的试金石.设计模式是程序员多年工作经 ...

  3. 《HTML重构》读书笔记&思维导图

    最近读了<HTML重构>这本书,以下做出自己的总结归纳,大家可以一起学习交流. 什么是重构?重构是在不改变程序行为的基础上进行小的改动是代码基本逐渐完善的过程,通常需要一些自动化工具的帮助 ...

  4. 思维导图分享以及MindManager使用说明

    来源于: http://www.cnblogs.com/muhongxing/archive/2009/12/22/1628782.html http://www.cnblogs.com/muhong ...

  5. JS高程读书笔记-第一、二章-内附在线思维导图和quizlet卡片

    之前在kindle上买了高程,今天又到了纸质的<JavaScript语言精粹>,<高性能JavaScript>,<JavaScipt设计模式>,开始读书之旅啦. 我 ...

  6. 一篇文章一张思维导图看懂Android学习最佳路线

    一篇文章一张思维导图看懂Android学习最佳路线 先上一张android开发知识点学习路线图思维导图 Android学习路线从4个阶段来对Android的学习过程做一个全面的分析:Android初级 ...

  7. Spring思维导图(MVC篇)

    写在前面 生活就像海洋,只有意志坚强的人才能到达彼岸. 已经很久没有发文章了呀,想必大家都挂念我了,哈哈. 温故而知新,今天一起来复习一下spring mvc的内容吧. spring mvc简介与运行 ...

  8. Java技术栈思维导图

    Java技术栈思维导图 Java IO流体系 设计模式

  9. iOS面试准备之思维导图

    以思维导图的方式对iOS常见的面试题知识点进行梳理复习,文章xmind点这下载,文章图片太大查看不了也点这下载 你可以在公众号 五分钟学算法 获取数据结构与算法相关的内容,准备算法面试 公众号回复 g ...

随机推荐

  1. DOM事件操作

    DOM事件:对事件做出反应 当事件发生时,可以执行 JavaScript,比如:点击时 onClick="" 例:当用户点击时,会改变 <h1> 元素的内容: < ...

  2. 如何在 UltraEdit 删除空行(含空格,制表符)

    如何在 UltraEdit 删除空行(含空格,制表符) 打开UltraEdit,ctrl+r弹出替换对话框,点选启用正则表达式方法1:在查找框输入 ^p^p:在替换框输入 ^p执行全部替换:这种方法是 ...

  3. PHP preg_grep() 函数

    preg_grep 函数用于返回匹配模式的数组条目.高佣联盟 www.cgewang.com 语法 array preg_grep ( string $pattern , array $input [ ...

  4. 笨办法学python 第四版 中文pdf高清版|网盘下载内附提取码

    笨办法学 Python是Zed Shaw 编写的一本Python入门书籍.适合对计算机了解不多,没有学过编程,但对编程感兴趣的朋友学习使用.这本书以习题的方式引导读者一步一步学习编 程,从简单的打印一 ...

  5. CF Contest 526 G. Spiders Evil Plan 长链剖分维护贪心

    LINK:Spiders Evil Plan 非常巧妙的题目. 选出k条边使得这k条边的路径覆盖x且覆盖的边的边权和最大. 类似于桥那道题还是选择2k个点 覆盖x那么以x为根做长链剖分即可. 不过这样 ...

  6. angular2+ 组件间通信

    angular2+ 不同于react的redux,vue的vuex,angular2+其实可实现数据状态管理的方法很多,以下方案一般也足够支撑普通业务: 父子组件通信 1.1 父组件向子组件传递信息( ...

  7. Spring学习总结(6)-@Component和@ComponentScan注解

    参考文档:https://docs.spring.io/spring/docs/5.2.0.RELEASE/spring-framework-reference/core.html#beans-ste ...

  8. JAVAWEB开发下常见中文乱码问题解决

    JAVA环境下处理中文乱码问题一直是很多人困扰的问题,像URL传参乱码,写进数据库乱码,服务写中文文字图片乱码处理及导出PDF乱码. 1:安装中文支持 yum groupinstall "f ...

  9. 07-NABCD项目分析

    时    间:2020.3.31 参加人员:向瑜.赵常恒.刘志霄 讨论记录内容: NABCD模型 ·N(need)-向瑜 你的创意解决了用户的什么需求? 1. 随时随地记录个人收支的明细,清楚明白的知 ...

  10. NIO(一):Buffer缓冲区

    一.NIO与IO: IO:  一般泛指进行input/output操作(读写操作),Java IO其核心是字符流(inputstream/outputstream)和字节流(reader/writer ...