裝飾模式

1)裝飾模式定義

動態的給一個對象添加一些額外的職責
2)應用裝飾模式來解決的思路
雖然經過簡化,業務簡單了很多,但是需要解決的問題不會少,還是要解決:要透明的給一個對象增加功能,並實現功能的動態組合。
所謂透明的給一個對象增加功能,換句話說就是要給一個對象增加功能,但是不能讓這個對象知道,也就是不能去改動這個對象。而實現了能夠給一個對象透明的增加功能,自然就能夠實現功能的動態組合,比如原來的對象有A功能,現在透明的給它增加了一個B功能,是不是就相當於動態組合了AB功能呢。
在裝飾模式的實現中,爲了能夠和原來使用被裝飾對象的代碼實現無縫結合,是通過定義一個抽象類,讓這個類實現與被裝飾對象相同的接口,然後在具體實現類裏面,轉調被裝飾的對象,在轉調的前後添加新的功能,這就實現了給被裝飾對象增加功能,這個思路跟對象組合非常類似。在轉調的時候,如果覺得被裝飾的對象的功能不再需要了,還可以直接替換掉,也就是不再轉調,而是在裝飾對象裏面完全全新的實現。

代碼示例:

/**
*一個接口,一個抽象方法
*/
publicinterfacePerson{

publicvoidsayMsg();
}


/**

*需要被裝飾的對象

*/

publicclassStudentimplementsPerson{

publicvoidsayMsg(){
System.out.println("Helloeveryone!");

}

}

/**

*裝飾器

*/

publicclassDecoratorimplementsPerson{
//需要裝飾的對象
privatePersonperson;
/**
*通過構造方法把要裝飾的對象傳進來
*/
publicDecorator(Personperson){
this.person=person;
}
publicvoidsayMsg(){
/**
*在相同的方法上,添加額外的邏輯
*/
System.out.println("先記一下日誌");
person.sayMsg();
System.out.println("然後再記錄");
}
}

//測試


publicclassTest{
publicstaticvoidmain(String[]args){
Personstudent=newDecorator(newStudent());
//student=newDecorator(student);
student.sayMsg();
}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章