文章末尾附带GitHub开源下载地址。

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 设计模式一网打尽,40余篇文章带你领略设计模式之美 | .Net中文网 访问。

设计模式概述

20世纪80年代,四人组(Gang of Four or GoF)将常用的23种软件设计模式进行了归纳整理,自此标志着软件设计模式的正式诞生。它旨在用“模式”来统一和沟通面向对象思想在分析、设计和解决问题之间的鸿沟。在未来的几十年里,它被证明是行之有效的软件开发准则,是通向软件架构师的必经之路,是软件开发领域的“葵花宝典”。

设计模式是一套被反复使用的、经过合理分类的、用于提高开发效率的设计经验的总结。本系列文章将以C#语言来系统的介绍这23种常用的设计模式。为了照顾之前没有接触过设计模式的同学,我将以一种“循序渐进的引导式方法”,来为大家阐述每一种设计模式的产生背景、优缺点及其适用场景。

面向对象设计原则(Object Oriented Design Principle or OODP)

面向对象设计的基本原则,它们就像面向对象程序设计中的金科玉律,遵守它们可以使我们的代码更加鲜活、易于复用、易于拓展、灵活优雅。不同的设计模式对应不同的需求,而设计原则则代表永恒的灵魂,需要在实践中时时刻刻地遵守。就如ARTHUR J.RIEL在那边《OOD启示录》中所说的:“你并不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看做警铃,若违背了其中的一条,那么警铃就会响起。”

面向对象设计原则之1-单一职责原则(Single Responsibility Principle or SRP)

面向对象设计原则之2-开放闭合原则(Open-Closed Principle or OCP)

面向对象设计原则之3-里氏替换原则(Liskov Substitution Principle or LSP)

面向对象设计原则之4-依赖倒置原则(Dependence Inversion Principle or DIP)

面向对象设计原则之5-接口隔离原则(Interface Segregation Principle or ISP)

面向对象设计原则之6-合成复用原则(Composite Reuse Principle or CRP)

面向对象设计原则之7-迪米特法则(Law of Demeter or LoD)

通用职责分配软件原则(General Responsibility Assignment Software Principle or GRASP)

通用职责分配软件原则主要是解决哪些功能职责放哪些类实现的问题,是讨论功能分配的问题,它介于分析和设计之间,是在类被识别之后,如何向类分配职责的的基本原则。通常在进行用例分析和设计时,以及后面的实现类设计时,应用GRASP原则来确定类在协作中所承担的职责,这些职责主要包括:1. 谁拥有信息?掌握或通过计算引申得到的某些信息,以及相关的其他对象;2. 做什么?自己做或者触发其他对象做某些事,以及控制或协调其他对象做某些事。然后根据这些信息以及相关的原则来分配职责。

通用职责分配软件原则之1-信息专家原则(Information Expert Principle)

通用职责分配软件原则之2-创造者原则(Creator Principle)

通用职责分配软件原则之3-低耦合原则(Low Coupling Principle)

通用职责分配软件原则之4-高内聚原则(High Cohesion Principle)

通用职责分配软件原则之5-控制器原则(Controller Principle)

通用职责分配软件原则之6-多态原则(Polymorphism Principle)

通用职责分配软件原则之7-纯虚构原则(Pure Fabrication Principle)

通用职责分配软件原则之8-中介原则(Indirection Principle)

通用职责分配软件原则之9-受保护变量原则(Protected Variations Principle)

创建型模式(Creational Pattern )

创建型模式对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节,使整个系统的设计更加符合单一职责原则。

创建型模式在创建什么(What),由谁创建(Who),何时创建(When)等方面都为软件设计者提供了尽可能大的灵活性。创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的。

C#设计模式之0-简单工厂模式(Simple Factory Pattern)

C#设计模式之1-工厂方法模式(Factory Method Pattern)

C#设计模式之2-抽象工厂模式(Abstract Factory Pattern)

C#设计模式之3-建造者模式(Builder Pattern)

C#设计模式之4-原型模式(Prototype Pattern)

C#设计模式之5-单例模式(Singleton Pattern)

结构型模式(Structural Pattern)

描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。结构型模式可以分为类结构型模式和对象结构型模式。

类结构型模式关心类的组合,由多个类可以组合成一个更大的系统,在类结构型模式中一般只存在继承关系和实现关系。 对象结构型模式关心类与对象的组合,通过关联关系使得在一个类中定义另一个类的实例对象,然后通过该对象调用其方法。 根据“合成复用原则”,在系统中尽量使用关联关系来替代继承关系,因此大部分结构型模式都是对象结构型模式。

C#设计模式之6-适配器模式(Adapter Pattern)

C#设计模式之7-桥接模式(Bridge Pattern)

C#设计模式之8-组合模式(Composite Pattern)

C#设计模式之9-装饰者模式(Decorator Pattern)

C#设计模式之10-外观模式(Facade Pattern)

C#设计模式之11-享元模式(Flyweight Pattern)

C#设计模式之12-代理模式(Proxy Pattern)

行为型模式(Behavioral Pattern)

行为型模式是对在不同的对象之间划分责任和算法的抽象化。它不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用。通过行为型模式,可以更加清晰地划分类与对象的职责,并研究系统在运行时实例对象之间的交互。在系统运行时,对象并不是孤立的,它们可以通过相互通信与协作完成某些复杂功能,一个对象在运行时也将影响到其他对象的运行。行为型模式分为类行为型模式和对象行为型模式两种。

类的行为型模式使用继承关系在几个类之间分配行为,类行为型模式主要通过多态等方式来分配父类与子类的职责。对象的行为型模式则使用对象的聚合关联关系来分配行为,对象行为型模式主要是通过对象关联等方式来分配两个或多个类的职责。根据“合成复用原则”,系统中要尽量使用关联关系来取代继承关系,因此大部分行为型设计模式都属于对象行为型设计模式。

C#设计模式之13-职责链模式(Chain of Responsibility Pattern)

C#设计模式之14-命令模式(Command Pattern)

C#设计模式之15-解释器模式(Interpreter Pattern)

C#设计模式之16-迭代器模式(Iterator Pattern)

C#设计模式之17-中介者模式(Mediator Pattern)

C#设计模式之18-备忘录模式(Memento Pattern)

C#设计模式之19-观察者模式(Observer Pattern)

C#设计模式之20-状态模式(State Pattern)

C#设计模式之21-策略模式(Stragety Pattern)

C#设计模式之22-模板方法模式(Template Method Pattern)

C#设计模式之23-访问者模式(Vistor Pattern)


免费下载

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 设计模式一网打尽,40余篇文章带你领略设计模式之美 | .Net中文网 访问。

本套设计模式教程已全部开源,地址:GitHub - byteflying/DesignPattern

总结

以上就是比特飞为大家总结撰写的40余篇设计模式系列文章,希望能对大家的编码水平有所帮助。

注:本文中部分介绍摘自百度百科

设计模式一网打尽,40余篇文章带你领略设计模式之美相关推荐

  1. “985”最年轻的特聘教授惹争议: 曾3年拿下博士学位,期间发40余篇SCI

    点击上方"码农突围",马上关注 这里是码农充电第一站,回复"666",获取一份专属大礼包 真爱,请设置"星标"或点个"在看 图片来 ...

  2. 四篇文章带你快速入门Jetpck(中)之ViewModel,DataBinding

    文章目录 四篇文章带你快速入门Jetpck(中)之ViewModel,DataBinding Jetpack 官方推荐架构 ViewModel 添加依赖 创建ViewModel 初始化ViewMode ...

  3. 什么产品适合抖音广告?本篇文章带你来了解

    到底什么产品适合抖音广告?抖音广告类型的多样化使不计其数的广告主选择在抖音这个热门app上投放产品广告.不断有很多广告主提出疑问,自己的产品到底适不适合在抖音做营销.下面为您介绍适合在抖音做广告的产品 ...

  4. 每个成功的男人背后都有个厉害的女人,这篇文章带你看看互联网大佬们背后的女人。...

    每个成功的男人背后都有个厉害的女人,这篇文章带你看看互联网大佬们背后的女人. 别看这些互联网大佬现在一幅高大上的样子,可是别忘了人家也有屌丝的时候,也有青春少年的时候啊!今天咱们就八卦一下,翻翻这些大 ...

  5. synchronized()_这篇文章带你彻底理解synchronized关键字

    Synchronized关键字一直是工作和面试中的重点.这篇文章准备彻彻底底的从基础使用到原理缺陷等各个方面来一个分析,这篇文章由于篇幅比较长,但是如果你有时间和耐心,相信会有一个比较大的收获,所以, ...

  6. 实战| Python爬虫、构建GUI、程序打包,这篇文章带你玩过瘾!

    系列导读 01.PySimpleGUI|基础 02.PySimpleGUI|进阶 大家好,在之前的PySimpleGUI基础与进阶文章中,我们已经介绍了如何使用它构建GUI的基本方法,本文将进一步通过 ...

  7. 两篇文章带你走入.NET Core 世界:CentOS+Kestrel+Ngnix 虚拟机先走一遍(一)

    背景: 上一篇:ASP.Net Core on Linux (CentOS7) 共享第三方依赖库部署 已经交待了背景,这篇就省下背景了. 折腾的过程分两步: 第一步是:本机跑虚拟机部署试一下: 第二步 ...

  8. 12篇文章带你进入NLP领域,掌握核心知识

    专栏<NLP>第一阶段正式完结了.在本专栏中,我们从NLP中常用的机器学习算法开始,介绍了NLP中常用的算法和模型:从朴素贝叶斯讲到XLnet,特征抽取器从RNN讲到transformer ...

  9. 「完结」12篇文章带你逛遍主流分割网络

    https://www.toutiao.com/a6717221469463511566/ 专栏<图像分割模型>正式完结了.在本专栏中,我们从编解码结构入手,讲到解码器设计:从感受野,讲到 ...

最新文章

  1. Java8 Lamdba表达式 002
  2. 5.1.8 缓冲区管理
  3. RK1109 RK1126等芯片来袭,2020年瑞芯微旗下SoC一览
  4. 风险评估资产重要性识别_如何有效的进行风险评估?
  5. 计算机导论123出栈顺序,优·计算机导论复习提纲.doc
  6. JeecgBoot单体升级微服务之一
  7. script标签的for属性和event属性
  8. Python3内置模块2-logging(转)
  9. acs510使用技巧_ABBACS510系列变频器通用接线图和参数表【借鉴实操】
  10. 洞悉身份认证 6000 年发展史,我们该警醒并学到什么?
  11. 【一路走来】北大数字媒体所保研面经
  12. 带宽在计算机系统中的意义,带宽是什么意思?
  13. 阅读Disentangling and Unifying Graph Convolutions for Skeleton-Based Action Recognition(CVPR2020)
  14. syntax error, expect {, actual string, pos 1, fastjson-version 1.2.68
  15. 银联支付页面怎么调起 php,php银联网页支付实现方法
  16. termux安装以及基本配置
  17. 51单片机串口SBUF是特殊寄存器,只要不写入新的数据就不会消失,写入新的数据就会覆盖之前的,单片机复位后初始值为不确定值
  18. chinapay 对接后台快捷支付交易
  19. My Deep Learning Paper Lib(2019)
  20. 解决git clone速度太慢的问题(SS socks5代理)

热门文章

  1. 《C和指针》——将无符号整数转换为字符
  2. 【C++基础学习】二维数组的动态分配及参数传递
  3. 9206-初识html
  4. xlwt写操作基本代码
  5. 前端开发 样式表的建立和优先级 0229
  6. redis-稿件-python连接redis-使用连接池的方式来创建
  7. django-模板变量
  8. django-数据库的操作-原始版本-表格的查询
  9. linux-权限管理acl高级
  10. 关于obs的录制时黑屏问题