C#设计模式 之 设计模式概述
前言:
作为攻城狮“设计模式”这个词应该都不陌生,那么,你有静下心来系统的学习它一下吗?本系列博文描述了面向对象设计模式的实现。之所以取名为 – C#设计模式,是因为我在文章中使用的实例是用C#语言来完成的。当然,你也可以以你熟悉的任意面向对象语言的角度来读此系列文章也是完全没有问题的。我将从它的意图,问题,解决方案,具体案例等多个方面助你掌握每一种设计模式。如果你刚好想系统的学习设计模式,又刚好看到了这篇文章,那么请和我一起学习一下吧?
一,为什么学习设计模式?
好的设计模式是可以满足“应对变化,提高复用”的设计,若你的程序没有变化,那么不需要设计模式,你也能将它写的很;但是目前为止我还做过不需要变化的项目,甚至有时功能刚刚开发一半就有需求变动。当然了更多的是后续功能拓展带来的变动,而这种变动可以通过设计模式来降低。
设计模式这个词汇,我刚开始接触项目的时候就听说了,可是学习它却是很久之后的事情(工作两三年还没有开始)。那时候一听说谁在什么地方用了设计模式,就感觉这个人很厉害。
当我开始学习设计模式时,我发现在不知的情况下已经用过了一些设计模式了(比如:单例模式)。由此可见也许设计模式并没有我们想想的那么高深莫测,也许并不需要多少年的编程功底,所有为什么不花些时间来系统的学习它一下呢?
二,什么是设计模式?
设计模式是软件设计中常见问题的典型解决方案。 它们就像能根据需求进行调整的预制蓝图, 可用于解决代码中反复出现的设计问题。
设计模式可以帮助设计者更好更快地完成系统设计,也使我们可以更加简单方便的复用成功的设计和体系结构。
设计模式定义了一种让你和团队成员能够更好的协作,比如:你说这个地方需要使用单例,那么大家都会知道该怎么做,你无需解释什么是单例。
设计模式区别于算法:因为两者在概念上都是已知问题的解决方案,所以会容易混淆。可以理解为算法是实现解决方案具体的实现步骤,而模式是对解决方案的更高层次的描述。
三,怎么描述设计模式?
大部分模式都有正规的描述方式, 以便在不同情况下使用。 模式的描述通常会包括以下部分:
- 意图部分:简单描述问题和解决方案。意图可以告诉我们这个设计模式是做什么的?它的基本原理是什么?它用于解决什么样的特定设计问题?
- 动机部分将进一步解释问题并说明模式会如何提供解决方案。动机用以说明一个设计问题以及如何用模式中的类,对象来解决该问题的特定情景,该情景会帮助你理解后对模式更抽象的描述。
- 结构部分:展示模式的每个部分和它们之间的关系。
- 效果部分:模式怎样支持它的目标,使用设计模式的效果和所需要做的取舍?系统结构的哪些可以独立改变?
- 实现部分:实现模式时需要知道一些提示,技术要点及应避免的缺陷和是否存在某些特定语言实现。
四,设计模式有哪几类?
不同设计模式的复杂程度、 细节层次以及在整个系统中的应用范围等方面各不相同。所有模式可以根据其意图或目的来分为三种主要的模式类别:
- 创建型模式:提供创建对象的机制, 增加已有代码的灵活性和可复用性。
创建型类模式将对象的部分创建工作延迟到子类,而创建型对象模式则将它延迟到另一个对象中。 - 结构型模式:介绍如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效。
结构型类模式使用继承机制来组合类,而结构型对象模式则描述了对象的组装方式。 - 行为模式:负责对象间的高效沟通和职责委派。
行为树类模式使用继承描述算法和控制流,而行为树对象模式则描述一组对象怎样协作完成单个对象所无法完成的任
23种设计模式:
创建型模式 | 结构型模式 | 行为模式 |
---|---|---|
这类模式提供创建对象的机制, 能够提升已有代码的灵活性和可复用性。 | 这类模式介绍如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效。 | 这类模式负责对象间的高效沟通和职责委派。 |
单例 Singleton 工厂方法 Factory Method 抽象工厂Abstract Factory 生成器 Builder 原型 Prototype |
适配器 Adapter 桥接 Bridge 组合 Composite 装饰 Decorator 外观 Facade 代理 Proxy 享元 Flyweight 策略 Strategy |
责任链 Chain of Responsibility 命令 Command 迭代器 Iterator 中介者 Mediator 备忘录 Memento 观察者 Observer 状态 State 模板方法 Template Method |
五,设计模式之间的关系?
有些设计模式经常绑到一起使用,下图给出模式关系的图形说明。
六,学习设计模式的四种状态:
- 没学前是一点不懂,根本想不到用设计模式,设计的代码很糟 糕;
- 学了几个模式后,很开心,于是到处想着要用自己学过的模 式,于是时常造成误用模式而不自知;
- 学完全部模式时,感觉诸多模式极其相似,无法分清模式之间 的差异,有困惑,但深知误用之害,应用之时有所犹豫;
- 灵活应用模式,甚至不应用具体的某种模式也能设计出非常优
推荐书籍:
《设计模式: 可复用面向对象软件的基础》 – GoF
《大话设计模式》-- 程杰
《敏捷软件开发:原则、模式与实践》-- RobertC. Martin
《重构:改善既有代码设计》-- Martin Fowler
- 点赞
- 收藏
- 关注作者
评论(0)