装饰模式(Decorator)

一、装饰模式的类图如下

 

下载

在装饰模式中的角色有:

  ●  抽象构件(Component)角色:就是需要装饰者的基类

  ●  具体构件(ConcreteComponent)角色:具体需要装饰的实例类

  ●  装饰(Decorator)角色:装饰物/装饰物 的基类

  ●  具体装饰(ConcreteDecorator)角色:具体装饰物类

话不多说,先看实例:

二、装饰模式具体实例

待装饰类的基类:

/**
 * 人
 */
public interface People {
    public void speak();
}

具体待装饰类   ,中国人一出生就说汉语,   在人生旅途中也需要学习多种语言来装饰自己

/**
 *
 * 中国人类   实现people
 * 重写speak()方法 , 中国人说汉语
 */
public class Chinese implements People {
    @Override
    public void speak() {
        System.out.println("中国娃说汉语");
    }
}

装饰物/装饰品 的基类  --此处装饰类  为语言

/**
 * 装饰类
 * 语言基类
 */
public class Language implements People {
    private People people;

    public Language() {
    }

    public Language(People people) {
        this.people = people;
    }

    @Override
    public void speak() {
        people.speak();
    }
}

具体装饰类1:    装饰自我  - - 学习英语

/**
 * 具体装饰类1
 * 学习说英语
 */
public class English extends Language{

    public English(People people) {
        super(people);
        people.speak();
    }

    @Override
    public void speak() {
        System.out.println("学会说英语");
    }
}

具体装饰类2    装饰自我  - - 学习法语

/**
 * 具体装饰类2
 * 学习说法语
 */
public class French extends Language{
    public French(People people) {
        super(people);
        people.speak();
    }

    @Override
    public void speak() {

        System.out.println("学会说法语");
    }
}

具体装饰类3    装饰自我  - - 学习德语

**
 * 具体装饰类
 * 学习说德语
 */
public class German extends  Language{
    public German(People people) {
        super(people);
        people.speak();
    }

    @Override
    public void speak() {
        System.out.println("学会说德语");
    }
}

测试类:

public class main {
    public static void main(String[] args) {
        People people  =  new Chinese();
       /* People people1 = new English(people);
        People people2 = new French(people1);
        people2.speak();*/
       People zhangsan = new English(new French(new German(people)));
       zhangsan.speak();
    }
}

输出结果:

输出结果.

posted @ 2018-01-03 00:42  Actexpler  阅读(199)  评论(0编辑  收藏  举报