1.如果你期望允许开发者动态组合对象的行为,可使用Decorator(装饰器)模式
2.举例
//人接口:Component角色
public interface Person {
void doSomethings();
}
//男人类:ConcreteComponent角色
public class Man implements Person{
@Override
public void doSomethings() {
// TODO Auto-generated method stub
System.out.println("Man do it");
}
}
//装饰抽象类:实现了人,但需要人来决定扮演角色
public abstract class Decorator implements Person{
private Person person;
public Decorator(Person person) {
// TODO Auto-generated constructor stub
this.person = person;
}
@Override
public void doSomethings() {
// TODO Auto-generated method stub
person.doSomethings();
}
}
//扮演女人演员:实现在扮演该角色该做的事情
public class WomanDecorator extends Decorator{
public WomanDecorator(Person person) {
super(person);
// TODO Auto-generated constructor stub
}
@Override
public void doSomethings() {
// TODO Auto-generated method stub
super.doSomethings();
System.out.println("WomanDecorator do it");
}
}
//测试类
public class Test {
public static void main(String[] args) {
Person p = new WomanDecorator(new Man());
p.doSomethings();
}
}
//结果
Man do it
WomanDecorator do it
3.总结:Decorator(装饰器)模式的意图是在运行时组合操作的新变化。该模式使得我们可以混合某操作的不同变化。经典例子是输入输出流,可以从其他流构造一个新的流。在应用程序代码中,我们可以应用该模式来建立函数包装器,这样我们能够根据有限的函数类集合来创建各种各样的函数对象。借助该模式,我们能够灵活设计具有公共操作的类,可以在运行时集成不同的变化。
4.参考:http://www.cnblogs.com/java-my-life/archive/2012/04/20/2455726.html