- 裝飾器模式的作用
在不修改原先對象核心的功能的情況下,對功能進行增強。
- 增強對象的功能的途徑
- 通過類繼承的方式,對父對象進行增強操作,例如造車是父類,改裝跑車,跑車加大燈,改裝房車,房車加私人電影院。如圖: 通過這種方式做的裝飾類會因為業務的復雜性激增
2.通過裝飾模式,將方法增強。如圖
- 裝飾模式架構
car :被裝飾的抽象類
package javadesign.decorate; /** * 抽象小汽車 */ public interface Car { public void buildCar(); }
benCar:被裝飾的實現
package javadesign.decorate; public class BenCar implements Car { @Override public void buildCar() { System.out.println("建造一輛車"); } }
Decorator:裝飾的類
package javadesign.decorate; public class Decorator implements Car { public Car car; public Decorator(Car car){ this.car=car; } @Override public void buildCar() { this.car.buildCar(); } }
StrongDecorator:裝飾的實現
package javadesign.decorate; public class Decorator implements Car { public Car car; public Decorator(Car car){ this.car=car; } @Override public void buildCar() { this.car.buildCar(); } }
Client:測試類
package javadesign.decorate; public class Client { public static void main(String[] args) { Car car=new BenCar(); Decorator decorator=new StrongDecorator(car); ((StrongDecorator) decorator).buildSportsCar(); ((StrongDecorator) decorator).buildHouseCar(); } }
測試結果:
總結:裝飾模式在不改變原先核心功能的情況下,可以實現增強,並且不會產生很多繼承類,按照業務模塊划分,通過不同的方法進行裝飾。