结构型模式,顾名思义讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象,从而实现新的功能(对象结构型模式)。这些结构模式,它们在某些方面具有很大的相识性,仔细推敲,侧重点却各有不同。

结构型模式——Decorator 装饰器(理论篇)

结构型模式,顾名思义讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式或者通过组合一些对象,从而实现新的功能(对象结构型模式)。这些结构模式,它们在某些方面具有很大的相识性,仔细推敲,侧重点却各有不同。

 

Decorator:在已有的对象动态地加入功能,或移除已有的功能。

特点:

原始对象对装饰一无所知;

不需要引入一个包含各种装饰选项的特性类;

多个装饰类之间彼此独立;

多个装饰类可以以一种“混搭”(mix-and-match,混合匹配)的方式组合到一起。

 

核心:客户可以互换使用组件对象或装饰器对象。

工作方式:重写所需的操作。

 

正文

Decorator,分为三个部分:组件、装饰器、操作。

既然我们是中国人,那么就要用中国人的思维去理解。首先我们先来举例说明一下,什么是装饰器?现在笔者给出4个“笔画”(这个比喻不是很恰当)。

 

1、横,一;

2、竖,丨;

3、撇,丿;

4、点,丶;

 

暂时撇弃一切有关于编程的东西,我们的目的很简单——任意组合。例如下面组合:

 

组合序号

结果

111

112

土、士、干、工

41112

玉、主

12

1

上面的组合,只是一个简单的示例,结果可能更多。

 

首先,什么是组件?记得小时候的我们,学写字的“正楷作业本”(如果我记错,请不要怪罪,我忘了。)?那作业本里就是一个“组件集合”,每一个框框,便是一个组件。我们暂时将“框框”(组件)分为三类:

 

1、 原始型,框框内空白()。

2、 横型,框框内已有一条横线()。

3、 竖型,框框内已有一条竖线(倒日)。

 

 

这便有三类组件。了解完组件,便不难理解横竖撇点是装饰品而所谓的“横型、竖型”,无非是原始组件多了一个装饰器

 

那么这个“横型”、“竖型”有什么作用呢?俗点讲:你可以少输入一笔。看似无用,其中奥义自去领回。

 

那么,最后的问题是,什么是操作?我们再次看看 1 的第三行。汉字“玉、主”,只是一个点之差,但是他们都是组合“41112”。那么,如何辨别差别呢?最简单的方法,无非是限制输入顺序。可是这里或许可行,但若是 1 的第二行,这个方法显然行不通了。“土、士”的笔画顺序皆是“121”。这个时候,便需要一个操作,就像要往一张图片上画上一只动物,那么这个动物需要在画在哪里呢?操作,便是解决了这个问题。

 

如果说高级一些,装饰器可以拥有一个特点,便是“行为”。最简单的RGB颜色。一张白纸上涂满red,在中间画上一个green的实心圆,那么那个实心圆的颜色,是绿色的么?

版权声明:本文为aloner原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/aloner/archive/2009/02/06/1385629.html