目录
1. 前言
与所有工程学一致,好的解决方案总是会被软件工程师在实践中反复使用,并且往往用过一个好方案、尝到了甜头,以后就喜欢重复使用这个模式,因此设计方案和经验对于软件工程师来说都是招牌技能般的存在。
但是实践环境千变万化,现实需求日益复杂、庞大驱使软件开发更复杂,只掌握少数几个解决方案恐怕是杯水车薪。所以想开辟新的板块,通过实例学习《设计模式:可复用面向对象软件的基础》里面的大量“招式”,并且通过这些“秘技”深入理解面向对象的“心法”原则。
2. 描述
以一种松散的方式把一些模式串接在一起来建造建筑是可能的。这样的建筑仅仅是一些模式的堆砌,而不紧凑。这不够深刻。然而另有一种组合模式的方式,许多模式重叠在同一个物理空间里:这样的建筑非常紧凑,在一小块空间里集成了许多内涵;由于这种紧凑,它变得深刻。
——A Pattern Language
我记得老师说过一句话,大概意思是,程序编写不再是手工艺式的、建立在个别人“手艺”的了,而是能以工程的方式批量生产。所以,纳入工程范畴的概念,应当都得到科学的、明确的描述,应当有可进行批量复制的基础范式。
我曾有过的经验是,有时一个问题解决了,但是不知道是在哪里、如何将它解决的,在程序设计中这种“神秘”的想法不应当成为习惯。而最好的方式就是事后用准确的语言来描述解决方案的痛点和具体解决过程。
设计模式也经历了从手工艺式的经验到标准范式的信息描述结构,以下为设计模式的信息描述结构
2.1 信息描述结构
模式名和分类
意图 设计模式是做什么的?它的基本原理和意图是什么?它解决的特定设计问题?
别名
动机 说明一个设计问题以及如何用模式中的类、对象来解决该问题的特定情景
适用性 什么情况下用?用来改进哪些不良设计?如何识别这些情况?
结构
参与者
协作
效果
实现 实现需要知道的一些提示、技术要点、应避免的缺陷,是否存在某些特定于实现语言的问题
代码示例
已知应用
相关模式
2.2 词汇表
真的多 TAT
3. 图示
这应当是设计模式中最常见的内容了 比如各种考试 :)
放几个个学习的链接吧
3.1 类图
以下为类图的组成
3.1.1 类
对一组具有相同属性、操作、关系、语义的事物的抽象。
3.1.2 继承
唐老鸭属于鸭的一种,或者说是鸭的细化划分,而鸭属于鸟类,鸟类属于动物,这里无论表达成“是”还是属于,就是这样一个直观的关系。用实线一端带空心三角箭头表示。箭头指向父类。
3.1.3 依赖
凡是动物,生存都需要水和空气,这种必须的需求,我们称之为依赖关系。用虚线一端带箭头表示,箭头指向依赖物。
3.1.4 组合、聚合
大雁和雁群的经典例子
很多大雁聚合在一起变成雁群,也可以说雁群里有雁,所以是整体和个体之间的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期。即雁群可以不存在了,但是孤雁仍然存在。
一只鸟由两个翅膀组合而成,即一只鸟有两个翅膀。虽然组合和聚合我们都说“有”什么,但是这个“有”是不同的,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束,比如这只鸟死了,自然这两个翅膀也就不存在了。
3.1.5 关联
企鹅和气候有关联,关联是最常见的关系,表示类与类之间的联接, 它使一个类知道另一个类的属性和方法。关联有两个端点, 在每个端点可以有一个基数, 表示这个关联的类可以有几个实例.
常见的基数及含义: 0..1:0 或1 个实例.
0..: 对实例的数目没有限制.
1: 只能有一个实例.
1..: 至少有一个实例.
3.1.6 接口
最后就是接口了,接口有两栏组成,第一栏的顶端加上《interface》后下方写接口名称,第二栏是接口方法。接口有自己的表示方法“实现”,虚线一端带空心三角形。实际开发中,为了更好的实现”开-闭原则”,一般都是定义接口,依赖于接口,依赖于抽象。