装饰模式——结构型设计模式之四

一、装饰模式

动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

 

装饰模式的出现

用例子说明:我们想要表达一个人,穿不同衣服,体现不同个性的一个程序。

首先定义一个人Person类;在定义一个抽象的衣服Clothes类,然后有各种衣服的子类。

在客户端通过实例化“人”,然后再实例化需要的“衣服”,分别调用show 方法。

这样也可以达到目的,但是我们看分析一下客户端。

Person a=new Person("小明");

T恤 t=new T恤();

垮裤 K=new 垮裤();

球鞋 q=new 球鞋();

 

//显示

a.show();

t.show();

k.show();

q.show();


 

问题一:从上述代码中可以看出这些穿衣服的顺序我们可以任意调换,但是一调换,是不是,可能就是另外一种装扮了,所以这样写的代码结构不稳定。

问题二:以上是一种装扮,如果我要展示N中装扮呢,我就需要把这些代码重复N遍。

 

为了避免这些问题,所以有了装饰模式。

 

使用装饰模式可以再客户端中将装饰过程进行嵌套封装,即使同样的衣服,改变一下顺序,就可以穿出两种风格。而且,穿衣服的件数不一定相同。

同时还减少了代码的数量,只需要用一个show 方法就可以调出嵌套的一系列动作。

 

使用装饰模式:

需要再衣服类中增加一个Decorate 方法,用来给嵌套的要装饰对象赋值。

代码显示:

Person a=new Person("小明");

T恤 t=new T恤();

垮裤 K=new 垮裤();

球鞋 q=new 球鞋();

 

//动作嵌套

q.decorate(a);

k.decorate(q);

t.decorate(k);

 

//显示

t.show();


 

二、类图

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值