开通VIP,畅享免费电子书等14项超值服
首页
好书
留言交流
下载APP
联系客服
2013.09.16
设计模式分为三大类型,一创建型,二结构型,三行为型.
而装饰者(decorator)模式是属于结构型的一种.
此模式主要的适应情况是:需要多种情况组合出现时.
也就是调用一个方法的时候,可能是ABC三个中的一种,也可能是他们的组合.
AB,AC,BC,AC等等.
如果听到类似的情形,需要组合多种情况出现的时候,就需要考虑到使用此种模式了.
这个模式顾名思义:就是装饰,一个本体可以有多种装饰物,多个装饰物用来修饰一个本体.
下面我们来举个小例子来加深下了解:
大致情况是:一家人在吃饭,小明的碗里只有白米饭,小明没有夹菜一直在吃白饭,爷爷看不下去了,
就给他夹了一块肉,妈妈也看不下去了,就给他夹了一块鱼,这个时候爸爸也看不下去了,光吃荤菜不行,
要荤素搭配呀,于是就给他夹了一根青菜.
在这个案例里,小明是一直没夹菜的,只顾自己吃饭.给他夹菜的是爸爸妈妈和爷爷.而这个夹菜的组合是
不固定的,可能都给他夹,也可能只有任何几个人夹菜,这样就动态给他增加了功能.
相关代码如下:
public
interface
IEat
{
void
Eat();
}
class
XiaoMing:IEat
Eat()
Console.WriteLine(
"小明只吃白米饭"
);
EatDecorator:IEat
private
IEat _eat;
EatDecorator(IEat eat)
this
._eat = eat;
virtual
if
(_eat !=
null
)
_eat.Eat();
MotherDecorator : EatDecorator
MotherDecorator(IEat eat)
:
base
(eat)
{ }
override
"妈妈给夹了一块鱼"
.Eat();
调用代码如下:
static void Main(string[] args) { IEat xiaoming = new XiaoMing(); IEat mom = new MotherDecorator(xiaoming); IEat dad = new FatherDecorator(mom); IEat grandpa = new GrandfatherDecorator(dad); grandpa.Eat(); }
运行结果如下:
此模式的精要在于:
微信登录中...请勿关闭此页面