生活随笔
收集整理的這篇文章主要介紹了
结构型模式:装饰模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我曾經以為應該用繼承處理一切。后來領教到運行時擴展,遠比編譯時期的繼承威力大。
本章可以稱為“給愛用繼承的人一個全新的設計眼界”。我們即將再度探討典型的繼承濫用問題。在本章將會學到如何使用對象組合的方式,做到在運行時裝飾類。一旦你熟悉了裝飾的技巧,你將能在不修改任何底層代碼的情況下,給你的(或別人的)對象賦予新的職責。
?
如果僅僅使用繼承,那么關系將會如下圖:
由于業務的擴展產生很多的子類,所以我們可以通過裝飾模式,從而進行組合擴展。
?
代碼實現如下:
package decorater;
public interface ICar {
??? void move();
}
package decorater;public class Car implements ICar {@Overridepublic void move() {
System.out.println("陸地上跑");}
}
package decorater;
//裝飾類
public class SuperCar implements ICar {
protected ICar car;public SuperCar(ICar car) {this.car = car;}@Overridepublic void move() {car.move();}
}
package decorater.superCar;import decorater.ICar;
import decorater.SuperCar;public class AICar extends SuperCar {public AICar(ICar car) {super(car);}@Overridepublic void move() {
??????? super.move(); //基礎功能System.out.println("智能遙控"); //新增功能}
}
package decorater.superCar;import decorater.ICar;
import decorater.SuperCar;public class FlyCar extends SuperCar{public FlyCar(ICar car) {super(car);}@Overridepublic void move() {
super.move(); //基礎功能System.out.println("天上飛"); //新增功能}
}
package decorater.superCar;import decorater.ICar;
import decorater.SuperCar;public class WaterCar extends SuperCar {public WaterCar(ICar car) {super(car);}@Overridepublic void move() {
??????? super.move(); //基礎功能System.out.println("水上游"); //新增功能??? }
}
package decorater;import decorater.superCar.AICar;
import decorater.superCar.FlyCar;
import decorater.superCar.WaterCar;public class test {public static void main(String[] args) {
ICar car = new Car();car.move();System.out.println("+++++++++++普通車++++++++++++++");WaterCar waterCar = new WaterCar(
car);waterCar.move();System.out.println("+++++++++++水上游的超跑++++++++++++++");AICar aiCar = new AICar(
waterCar);aiCar.move();System.out.println("+++++++++++人工智能的水上游超跑++++++++++++++");SuperCar superCar = new FlyCar(
aiCar);superCar.move();System.out.println("+++++++++++集齊所有功能的超跑++++++++++++++");}
}
?
結果:
陸地上跑
+++++++++++普通車++++++++++++++
陸地上跑
水上游
+++++++++++水上游的超跑++++++++++++++
陸地上跑
水上游
智能遙控
+++++++++++人工智能的水上游超跑++++++++++++++
陸地上跑
水上游
智能遙控
天上飛
+++++++++++集齊所有功能的超跑++++++++++++++
裝飾模式:
優點:動態的為一個對象增加新的功能,無需通過繼承增加子類就能拓展對象的新功能,同時避免類型體系的快速膨脹,即避免了子類數量過多。實現靈活,易于管理。
缺點:實現起來易于出錯,不易調試。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的结构型模式:装饰模式的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。