设计模式的艺术之道--设计模式的基本概念

设计模式的艺术之道–设计模式的基本概念

声明:本系列为刘伟老师博客内容总结(http://blog.csdn.net/lovelion),博客中有完整的设计模式的相关博文,以及作者的出版书籍推荐

本系列内容思路分析借鉴了刘伟老师的博文内容,同时改用C#代码进行代码的演示和分析(Java资料过多 C#表示默哀).

系列分为4个部分

第1部分:基础知识,主要介绍与设计模式相关的基础知识,包
括设计模式概述、UML 类图、7个面向对象设计原则等内容基础。

第2部分:创建的艺术,介绍6种常用的创建型设计模式,分别是单例
模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。

第3部分:组合的艺术,介绍7种常用的结构型设计模式分别是适配器模式 、 桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。

第4部分: 交互的艺术,介绍 11 种常用的行为型设计模式,分别是职责链模式、 命令模式、解释器模式、迭代器模式、中介者模式备忘录模式、观察者模式 、 状态模式、策略模式、模板方法模式和访问者模式。


第一部分

第一章 设计模式的基本概念

1.1设计模式的定义

设计模式(Design Pattern)
- 一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结
- 是一种用于对软件系统中不断重现的设计问题的解决方案进行文档化的技术
- 是一种共享专家设计经验的技术
- 目的:为了可重用代码、让代码更容易被他人理解、提高代码可靠性

1.2设计模式的分类

根据目的(模式是用来做什么的)可分为创建型(Creational),结构型(Structural)和行为型(Behavioral)三类:
- 创建型模式主要用于创建对象
- 结构型模式主要用于处理类或对象的组合
- 行为型模式主要用于描述类或对象如何交互和怎样分配职责

根据范围,即模式主要是处理类之间的关系还是处理对象之间的关系,可分为类模式和对象模式两种:
- 类模式处理类和子类之间的关系,这些关系通过继承建立,在编译时刻就被确定下来,是一种静态关系
- 对象模式处理对象间的关系,这些关系在运行时变化,更具动态性
这里写图片描述

1.3设计模式的优点

  • 融合了众多专家的经验,并以一种标准的形式供广大开发人员所用
  • 提供了一套通用的设计词汇和一种通用的语言,以方便开发人员之间进行沟通和交流,使得设计方案更加通俗易懂
  • 让人们可以更加简单方便地复用成功的设计和体系结构
  • 使得设计方案更加灵活,且易于修改
  • 将提高软件系统的开发效率和软件质量,且在一定程度上节约设计成本
  • 有助于初学者更深入地理解面向对象思想,方便阅读和学习现有类库与其他系统中的源代码,还可以提高软件的设计水平和代码质量

1.4设计模式学习作者的观点

作为设计模式的忠实粉丝和推广人员,在正式学习设计模式之前,我结合多年的模式应用和教育培训经验与大家分享几点个人的看法,以作参考:

  1. 掌握设计模式并不是件很难的事情,关键在于多思考,多实践,一定要有自己的思考和离解过程,只要用心学习,设计模式也就那么回事,你也可以很“牛”的,一定要有信心。

  2. 在学习每一个设计模式时至少应该掌握如下几点:这个设计模式的意图是什么,它要解决一个什么问题,什么时候可以使用它;它是如何解决的,掌握它的结构图,记住它的关键代码;能够想到至少两个它的应用实例,一个生活中的,一个软件中的;这个模式的优缺点是什么,在使用时要注意什么。当你能够回答上述所有问题时,恭喜你,你了解一个设计模式了,至于掌握它,那就在开发中去使用吧,用多了你自然就掌握了。

  3. 学习设计模式的目的在于应用,如果不懂如何使用一个设计模式,而只是学过,能够说出它的用途,绘制它的结构,充其量也只能说你了解这个模式,严格一点说:不会在开发中灵活运用一个模式基本上等于没学。所以一定要做到:少说多做。

  4. 千万不要滥用模式,不要试图在一个系统中用上所有的模式。每个模式都有自己的适用场景,不能为了使用模式而使用模式?滥用模式不如不用模式,因为滥用的结果得不到“艺术品”一样的软件,很有可能是一堆垃圾代码。

  5. 如果将设计模式比喻成“三十六计”,那么每一个模式都是一种计策,它为解决某一类问题而诞生,不管这个设计模式的难度如何,大家都应该好好学学,多学一个模式也就意味着你多了“一计”,说不定什么时候一不小心就用上了。

  6. 设计模式的“上乘”境界:“手中无模式,心中有模式”。模式使用的最高境界是你已经不知道具体某个设计模式的定义和结构了,但你会灵活自如地选择一种设计方案【其实就是某个设计模式】来解决某个问题,设计模式已经成为你开发技能的一部分,能够手到擒来。

猜你喜欢

转载自blog.csdn.net/wwlcsdn000/article/details/78678975