装饰器模式是在不改变原有类的基础上给类新增功能。 这种实现方式,可以避免继承导致的子类过多问题,也可以避免AOP模式带来的复杂性
模拟一个给人装扮的程序
首先 “人” 类
public class Person {
public Person(){}
public Person(String name) {
this.name = name;
}
private String name ;
public String getName() {
return name;
}
public Person setName(String name) {
this.name = name;
return this;
}
public void show(){
System.out.println("帅气的"+name);
}
}
装饰类
public class Finery extends Person{
protected Person person;
public void decorate(Person person){
this.person = person;
}
@Override
public void show() {
if (person != null)
person.show();
}
}
具体的服饰类
public class TShirts extends Finery{
@Override
public void show() {
System.out.println("大体恤");
super.show();
}
}
public class BigTrouser extends Finery{
@Override
public void show() {
System.out.println("大裤衩");
super.show();
}
}
最后测试类
public class ZSQTest {
public static void main(String[] args) {
Person person = new Person("TR");
TShirts tShirts = new TShirts();
BigTrouser bigTrouser = new BigTrouser();
tShirts.decorate(person);
bigTrouser.decorate(tShirts);
bigTrouser.show();
}
}
总结:
- Component类 定义一个接口
- ConcreteComponent类 ----接口实现 ,给这个对象添加一些功能
- Decorator类 继承 Component 从外类扩展Component类的功能,但是对于Component是不需要知道Decorator的存在的。
- ConcreteDecoratorA类–具体的装饰对象,给Component添加功能。
|