《设计模式系列》--- 装饰者模式

 装饰者模式

    为已有的功能动态的添加更多功能的一种方式在主类中加入了新的字段,新的方法和新的逻辑,增加了主类的复杂度,而这些新加入的东西仅仅是为了满足一些只在某种特定的情况下才会执行的特殊行为的需要。装饰者模式很好的解决此种情况,它把每个要装饰的功能放在单独的类中, 并让这个类包装它所要装饰的对象,因此,当需要执行特殊行为时,客户代码就可以在运行时根据需要有选择的,按顺序 的适用装饰功能包装对象了。

/**
 * @author stefanie zhao
 * @date 2014-8-13 下午04:20:34
 */
public class Person {

    public Person() {
    }

    private String name;

    public Person(String name) {
        this.name = name;
    }

    public void show() {
        System.out.format("装扮的%s", name);
    }
}

/**
 * @author stefanie zhao
 * @date 2014-8-13 下午04:29:23
 */
public class Finery extends Person {

    protected Person component;

    public void Decorate(Person component) {
        this.component = component;
    }

    public void show() {
        if (component != null)
            component.show();
    }
}

/**
 * @author stefanie zhao
 * @date 2014-8-13 下午04:31:08
 */
public class BigTrouser extends Finery {

    public void show() {
        System.out.println("垮裤");
        super.show();
    }

}

/**
 * @author stefanie zhao
 * @date 2014-8-13 下午04:31:08
 */
public class TShirts extends Finery {

    public void show() {
        System.out.println("T恤");
        super.show();
    }

}

public class Main {
    public static void main(String[] args) {
        Person person = new Person("stef");
        BigTrouser bt = new BigTrouser();
        TShirts ts = new TShirts();

        bt.Decorate(person);
        ts.Decorate(bt);
        ts.show();

    }
}


你可能感兴趣的:(java,设计模式,装饰者模式)