码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式——装饰模式

时间:2015-03-06 22:17:32      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:设计模式   装饰模式   

场景设置

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

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

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穿戴,拥有了跟人一样的show方法,即可被看到,同时还保证了裤子通过person变成了一个穿着裤子的人,本质变成了一个Person。
接下来需要穿衣服:

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

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

在客户端实现一个人穿戴整齐起床的代码如下:

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就是一种P;而装饰B将装饰A再包装之后,装饰B仍然是一种P。
因此,在调用最原始对象P的show方法时,先调用外层装饰类B的show,然后进入A的show,最后才是P对象的show方法。因此,装饰类的最终表现类似于递归,由外到内层层深入。

设计模式——装饰模式

标签:设计模式   装饰模式   

原文地址:http://blog.csdn.net/langduhualangdu/article/details/44105041

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!