3.装饰模式

实现穿衣打扮

0. UML图

1.被装饰的最原始的类

/**
 * @author makex
 * @note 被装饰的最根上的类
 * @create 2017-06-13
 */
public class Person {
    public Person() {
    }

    private String name;

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

    public void show(){
        System.out.println("待装饰的"+name);
    }
}

2.装饰父类

* @author makex
 * @note 装饰人的服饰类
 * @create 2017-06-13
 */
public class Finery extends Person{

    protected Person component;

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

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

}

3.具体装饰子类

/**
 * @author makex
 * @note 具体服饰类
 * @create 2017-06-13
 */
public class BigTrouser extends Finery {

    @Override
    public void show() {
        System.out.println("穿跨裤");
        super.show();
    }
}
/**
 * @author makex
 * @note 具体服饰类
 * @create 2017-06-13
 */
public class Suit extends Finery {

    @Override
    public void show() {
        System.out.println("穿西装");
        super.show();
    }
}
/**
 * @author makex
 * @note 具体服饰类
 * @create 2017-06-13
 */
public class Tie extends Finery {

    @Override
    public void show() {
        System.out.println("打领带");
        super.show();
    }
}

4.测试类

/**
 * @author makex
 * @note 测试类
 * @create 2017-06-13
 */
public class TestClass {
    public static void main(String[] args) {
        Person base = new Person("mark");

        System.out.println("第一种装饰");
        BigTrouser bigTrouser = new BigTrouser();
        Suit suit = new Suit();
        Tie tie = new Tie();

        tie.decorator(base);
        suit.decorator(tie);
        bigTrouser.decorator(suit);
        bigTrouser.show();

        /**
         * 第一种装饰
         * 穿跨裤
         * 穿西装
         * 打领带
         * 待装饰的mark
         */

    }
}

posted @ 2017-06-13 11:11  桃源仙居  阅读(112)  评论(0)    收藏  举报