image.png
Compnent定義了一個(gè)對(duì)象接口拦耐,可以給這些對(duì)象添加職責(zé)婶希,ConcreteComponent定義了一個(gè)具體對(duì)象榕暇,Decorator是裝飾類,用來(lái)擴(kuò)展功能喻杈,
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();
其實(shí)寫到這里我有一個(gè)疑問(wèn)彤枢。 大家來(lái)想一下; 這個(gè)和組合模式 有沒(méi)有什么相同的和不同筒饰。
他們的uml圖是很大一部分是相同的缴啡,不同的地方就是 組合模式是在枝干部分從新聚合根節(jié)點(diǎn)也就是抽象類
而裝飾模式 它會(huì)有一個(gè)專門的裝飾類是獨(dú)立出來(lái)的。Decorator瓷们, 在這個(gè)類中 構(gòu)造方法中用了Compont這個(gè)抽象類盟猖,從而調(diào)用具體的對(duì)象類的方法