国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php框架 > 框架设计 > 设计模式――装饰模式

设计模式――装饰模式

来源:程序员人生   发布时间:2015-03-16 11:00:01 阅读次数:3136次

场景设置

我早上起床,光着身子。这时候我要穿衣服,先穿裤子再穿上衣。
我该怎样实现这个进程呢?

首先我是1个赤裸裸的人,并且我能被他人看到:

class Person { protected String name; protected String body; public void show(){ System.out.println("身体"); } }

然后,我要先穿裤子:

class Trousers extends Person{ private Person person; public Trousers(Person person){ this.person = person; } @Override public void show(){ System.out.println("穿了裤子的"); person.show(); } }

这里之所以extendsPerson,是由于Trousers通过Person穿着,具有了跟人1样的show方法,便可被看到,同时还保证了裤子通过person变成了1个穿着裤子的人,本质变成了1个Person。
接下来需要穿衣服:

class Tshirt extends Person { private Person person; public Tshirt(Person person) { this.person = person; } @Override public void show(){ System.out.println("穿衣服的"); person.show(); } }

一样道理,把某1个装潢类对象Person传入Tshirt以后,该Person在show的时候就先穿好衣服了。

在客户端实现1个人穿着整齐起床的代码以下:

public static void main(String[] args){ Person xiaomingPerson = new Person(); Trousers trousers = new Trousers(xiaomingPerson); Tshirt tshirt = new Tshirt(trousers); tshirt.show(); }

装潢模式有这样的特点,装潢A将某个对象P包装以后,A就是1种P;而装潢B将装潢A再包装以后,装潢B依然是1种P。
因此,在调用最原始对象P的show方法时,先调用外层装潢类B的show,然落后入A的show,最后才是P对象的show方法。因此,装潢类的终究表现类似于递归,由外到内层层深入。

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生