结构型模式--心得

来源:互联网 发布:ipad511软件下载 编辑:程序博客网 时间:2024/05/02 18:19

结构型强调的是1+1〉2,即充分利用现有的类或者对象,通过合理的组装,达到意想不到(其实是迫切想达到)的效果。

1.adapter.这个基本上现有的系统中都或多或少的会用到。因为,一部分的结构是根据自己的系统制定的,另一方面利用平台提供的类库,MFC .net等等。想把这两个结合起来使用,必然要使用适配器模式拉。这里面主要是区分类适配和对象适配。即继承还是组合拉,都差不多。好比现有一个类可以计算两个数值的加减。那么有一个计算方差的类就可以利用这个类进行方差计算拉。

2。bridge模式。这个模式业界最大的用处是利用它进行平台无关化设计。我们一般在讲设计的时候,一定会有抽象和实现的概念出来。抽象就是为了不同的实现,灵活性就是这个拉。但是每个实现都离不开平台特性的。最明显的就是画图或者网络同性。绝对无法通用的。这样一来,bridge模式,进行了二次抽象,假设上层接口不变,实现的方式或者说接口抽象出来一层,利用这层抽象去实现上层接口,这样一来不管哪个平台,只要实现了,则上层接口是不在乎的。其实,这里面蕴含的是OO设计中非常著名的“接口倒置”原则。以往讨论问题,会发现都是上层依赖下层,这个其实是很危险的,如果一个上层利用四个下层实现,那么这个上层受到四个地方修改而引修改的危险。不稳定性很高。

3。组合模式。强调的是动态管理容器。添加或者删除容器内的元素,而这些元素都具有相似的职责,否则不适用该模式。避免用户每次都要关心每个细小的元素,尤其是可以体现父子关系的时候,这个模式其实是做了一层封装。

4。装饰模式。这个模式很重要,充分体现了模式的动态性和灵活性。其实,对于一个既有系统而言,可以动态的添加新的职责是一个多么令人欣慰的事情。好比一个做计算的类已经处理完了,我现在需要一个类可以把这个结果和过程记录下来。那么,我就需要继承这个类,然后利用现有的方法处理计算,在新增一个职责,把过程和结果写入某文件。

5.共享元模式。模式用过了或者设计过渡都会造成一个问题,叫作子类爆炸或者对象爆炸。虽然现在及其的性能空前提高,但是盲目使用尤其是大项目的时候,合理利用利用资源不说是必要的,起码也是自身水平的体现。我理解的flyweight的使用的地方主要是有大量的 类生成的对象,实用这些对象的时候没有什么内部状态可言。通常一个类会生成随意多个对象,这些对象的不同点就是拥有不同的内部状态,每个状态都是每个类的瞬间快照,每个对象会根据当前状态而往下选择不同的行为走。而如果这个类生成的对象没有状这个说法,那么哪怕是外部某对象先用对象A的某个方法运行,再把对象B拿来执行剩下的方法,都是可以的。在这个前提下,flyweight才可以用。反正无论多少个都一样,那还不如就生成一个,这就是为什么说他可以节省空间了。通常我们把这些对象先生成好,随要随取,在每个调用他的对象内部只记录他的站位符号,而不是他的副本(用副本我们还讨论什么,原型模式不是有拉)

原创粉丝点击