无废话C#设计模式之二十二:总结(针对GOF23)

比较

设计模式

常用程度

适用层次

引入时机

结构复杂度

Abstract Factory

比较常用

应用级

设计时

比较复杂

Builder

一般

代码级

编码时

一般

Factory Method

很常用

代码级

编码时

简单

Prototype

不太常用

应用级

编码时、重构时

比较简单

Singleton

很常用

代码级、应用级

设计时、编码时

简单

Adapter

一般

代码级

重构时

一般

Bridge

一般

代码级

设计时、编码时

一般

Composite

比较常用

代码级

编码时、重构时

比较复杂

Decorator

一般

代码级

重构时

比较复杂

Facade

很常用

应用级、构架级

设计时、编码时

简单

Flyweight

不太常用

代码级、应用级

设计时

一般

Proxy

比较常用

应用级、构架级

设计时、编码时

简单

Chain of Resp.

不太常用

应用级、构架级

设计时、编码时

比较复杂

Command

比较常用

应用级

设计时、编码时

比较简单

Interpreter

不太常用

应用级

设计时

比较复杂

Iterator

一般

代码级、应用级

编码时、重构时

比较简单

Mediator

一般

应用级、构架级

编码时、重构时

一般

Memento

一般

代码级

编码时

比较简单

Observer

比较常用

应用级、构架级

设计时、编码时

比较简单

State

一般

应用级

设计时、编码时

一般

Strategy

比较常用

应用级

设计时

一般

Template Method

很常用

代码级

编码时、重构时

简单

Visitor

一般

应用级

设计时

比较复杂

注:常用程度、适用层次、使用时机等基于自己的理解,结构复杂度基于C#语言,表格中所有内容仅供参考。

原则、变化与实现

设计模式

变化

实现

体现的原则

Abstract Factory

产品家族的扩展

封装产品族系列内容的创建

开闭原则

Builder

对象组建的变化

封装对象的组建过程

开闭原则

Factory Method

子类的实例化

对象的创建工作延迟到子类

开闭原则

Prototype

实例化的类

封装对原型的拷贝

依赖倒置原则

Singleton

唯一实例

封装对象产生的个数

Adapter

对象接口的变化

接口的转换

Bridge

对象的多维度变化

分离接口以及实现

开闭原则

Composite

复杂对象接口的统一

统一复杂对象的接口

里氏代换原则

Decorator

对象的组合职责

在稳定接口上扩展

开闭原则

Facade

子系统的高层接口

封装子系统

开闭原则

Flyweight

系统开销的优化

封装对象的获取

Proxy

对象访问的变化

封装对象的访问过程

里氏代换原则

Chain of Resp.

对象的请求过程

封装对象的责任范围

Command

请求的变化

封装行为对对象

开闭原则

Interpreter

领域问题的变化

封装特定领域的变化

Iterator

对象内部集合的变化

封装对象内部集合的使用

单一职责原则

Mediator

对象交互的变化

封装对象间的交互

开闭原则

Memento

状态的辅助保存

封装对象状态的变化

接口隔离原则

Observer

通讯对象的变化

封装对象通知

开闭原则

State

对象状态的变化

封装与状态相关的行为

单一职责原则

Strategy

算法的变化

封装算法

里氏代换原则

Template Method

算法子步骤的变化

封装算法结构

依赖倒置原则

Visitor

对象操作变化

封装对象操作变化

开闭原则

学习

l 掌握设计模式的意图以及解决的问题

l 掌握设计模式所封装的变化点以及优缺点

l 了解设计模式的结构图以及各角色的职责

l 项目中是否应用了设计模式不重要,重要的是设计模式是否正确应用

l 项目中应用的设计模式和GOF设计模式的结构是否一致不重要,重要的是是否从这个结构中得意

l 不管用了还是没有用设计模式,如果违背了原则,就是不恰当的设计

l 没有设计模式是万能的,沉迷于获得一个解决方案的话可能会导致项目结构复杂、代码可读性差、并且造成项目延期

结束语

l 常用的GOF 23种设计模式介绍完了,这才是起点。

l 本系列文章并没有结束,关注之后非GOF 23种设计模式的相关文章。

l 如果适当运用C# 2.0一些有用的特性(特别是代理、泛型以及分部类和设计模式关联比较大)的话,传统的设计模式有非常大的改进的余地。在实际运用的过程中,优先考虑适用语言特性,如果不行再去考虑适用设计模式。

l 迭代器模式(在C# 2.0中实现非常简单)、解释器模式(应用面非常小,自己也没有整明白)以及备忘录模式(比较简单,没有什么可说的)没有单独立文介绍,但在代码包中包含了相应的例子,所有代码点击这里下载。

转载于:https://www.cnblogs.com/gnhao/archive/2013/01/24/2875112.html

(原创)无废话C#设计模式之二十二:总结(针对GOF23)相关推荐

  1. (原创)无废话C#设计模式之十二:Bridge

    无废话C#设计模式之十二:Bridge 意图 将抽象部分与实现部分分离,使它们都可以独立的变化. 场景 还是说我们要做的网络游戏,多个场景需要扩充的问题我们已经采用了创建型模式来解决.现在的问题就是, ...

  2. (原创)无废话C#设计模式之十九:Observer

    无废话C#设计模式之十九:Observer 意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新. 场景 这次不说游戏了,假设我们需要在一个W ...

  3. (原创)无废话C#设计模式之十一:Composite

    无废话C#设计模式之十一:Composite 意图 将对象组合成树形结构以表示"部分-整体"的层次结构.Composite模式使得用户对单个对象和组合对象的使用具有一致性. 场景 ...

  4. (原创)无废话C#设计模式之十七:Chain Of Resp.

    无废话C#设计模式之十七:Chain Of Resp. 意图 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象能处理 ...

  5. (原创)无废话C#设计模式之四:Factory Method

    无废话C#设计模式之四:Factory Method       <a href='http://xgb.xgb.cc'>a</a>   <a href='http:// ...

  6. 备忘录模式 Memento 快照模式 标记Token模式 行为型 设计模式(二十二)

    备忘录模式 Memento 沿着脚印,走过你来时的路,回到原点. 苦海翻起爱恨 在世间难逃避命运 相亲竟不可接近 或我应该相信是缘份 一首<一生所爱>触动了多少人的心弦,一段五百年都没有结 ...

  7. 【白话设计模式二十二】解释器模式(Interpreter)

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factory) [白话设计模式二] ...

  8. 最新首途影视视频网站源码/二十二套带后台版全开源无加密源码

    源码简介: 最新首途二十二套带后台版全开源无加密源码 菜单填写格式:MyTheme主题,/template/mytheme/admin/默认账号:admin默认密码:admin 下载链接 网盘源码  ...

  9. 大话设计模式笔记(二十一、二十二、二十三、二十四、二十五、二十六)

    二十一.单例模式(Singleton) 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 1.通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象.一个最好的办法就是 ...

最新文章

  1. 武林外传辅助工具详细制作过程[第二篇:查看数据]
  2. 求任意大小矩阵的转置矩阵
  3. MongoDB-集群搭建
  4. 单硬盘上mac + win7双系统,GUID-GPT分区
  5. Assembly.Load,LoadFile,LoadFrom
  6. 一些简单的前端练习demo
  7. 【实用工具】远程桌面工具
  8. 计算机网络工程安装,一种计算机网络工程用施工平台的制作方法
  9. C10K问题及解决方案
  10. VASP_Si的能带结构计算_步骤整理
  11. 计算机优秀毕业生访谈,访谈 | 信息院优秀毕业生经验分享
  12. 借助传感器用计算机测量速度,实验用打点计时器测速度修改.ppt
  13. 选择高防空间应该注意什么?
  14. NFS unmatched host
  15. 复制宝贝到淘宝店铺,主图和标题不做修改,是否会被封店?
  16. 2022年自考专业考试(英语)外贸函电练习题
  17. Python报错pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool解决方法
  18. 华硕打不开vm里面的Linux,华硕主板 Vmware虚拟机 二进制转换与此平台上的长模式不兼容...
  19. java毕业生设计疫情防控网站计算机源码+系统+mysql+调试部署+lw
  20. fortran教程7:输入输出

热门文章

  1. Node_初步了解(4)小爬虫
  2. 如何解决Ubuntu与Windows双系统时间不同步
  3. Visual Studio 2008 断点调试直接跳出代码窗口
  4. 自己遇到oracle的错误记录
  5. C#实现实体类和XML相互转换
  6. 浅析C语言中strtol()函数与strtoul()函数的用法
  7. C++和C#相互调用COM组件的方法简介
  8. css 选择href属性值,巧用CSS属性值正则匹配选择器(小技巧)
  9. c++调用gcd函数_c++函数库中一些实用的函数
  10. linux cd的帮助文件,linux查看命令帮助man命令详解在线手册