Compnent定义了一个对象接口,可以给这些对象添加职责,ConcreteComponent定义了一个具体对象,Decorator是装饰类,用来扩展功能,
public abstract class diannao {
public abstract void dazi();
}
public class todaydazi extends diannao {
@Override
public void dazi() {
Log.d("zhuangshi","今天打字");
}
}
public class daziDecorator extends diannao {
diannao diannao ;
public daziDecorator(com.zhuangshi.diannao diannao) {
this.diannao = diannao;
}
@Override
public void dazi() {
diannao.dazi();
}
}
public class sougoudazi extends daziDecorator {
public sougoudazi(com.zhuangshi.diannao diannao) {
super(diannao);
}
@Override
public void dazi() {
super.dazi();
}
}
public class baidudazi extends daziDecorator {
public baidudazi (com.zhuangshi.diannao diannao) {
super(diannao);
}
@Override
public void dazi() {
super.dazi();
}
}
/**
* 装饰模式
*
*/
diannao diannao = new todaydazi();
daziDecorator daziDecorator = new daziDecorator(diannao);
daziDecorator.dazi();
其实写到这里我有一个疑问。 大家来想一下; 这个和组合模式 有没有什么相同的和不同。
他们的uml图是很大一部分是相同的,不同的地方就是 组合模式是在枝干部分从新聚合根节点也就是抽象类
而装饰模式 它会有一个专门的装饰类是独立出来的。Decorator, 在这个类中 构造方法中用了Compont这个抽象类,从而调用具体的对象类的方法