一、定义
装饰模式动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
Component是定义一个对象接口,可以给这些对象动态地添加职责。ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责。Decorator装饰抽象类,继承了Component,从外类来扩展Component类的功能,但对于Component来说,是无需知道Decorator的存在的。至于ConcreteDecorator就是具体的装饰对象,起到给Component添加职责的功能。
二、UML类图
三、实现
- 被装饰对象
package com.jthao.design.des.decorator;
public class Person {
public Person() {
}
private String name;
public Person(String name) {
this.name = name;
}
public void show() {
System.out.println("打扮好的" + name);
}
}
- 装饰抽象类
package com.jthao.design.des.decorator;
public class Finery extends Person {
protected Person person;
public void decorate(Person person) {
this.person = person;
}
public void show() {
if (person != null) {
person.show();
}
}
}
- 具体装饰对象A
package com.jthao.design.des.decorator;
public class Tie extends Finery {
public void show() {
System.out.println("领带");
super.show();
}
}
- 具体装饰对象B
package com.jthao.design.des.decorator;
public class TShirts extends Finery {
public void show() {
System.out.println("T恤");
super.show();
}
}
- 测试类
package com.jthao.design.des.decorator;
public class DecoratorTest {
public static void main(String[] args) {
Person person = new Person("小明");
TShirts tShirts = new TShirts();
Tie tie = new Tie();
tShirts.decorate(person);
tie.decorate(tShirts);
tie.show();
}
}