java 設計模式 之 裝飾器模式


  • 裝飾器模式的作用

    在不修改原先對象核心的功能的情況下,對功能進行增強。

  • 增強對象的功能的途徑
  1. 通過類繼承的方式,對父對象進行增強操作,例如造車是父類,改裝跑車,跑車加大燈,改裝房車,房車加私人電影院。如圖: 通過這種方式做的裝飾類會因為業務的復雜性激增

    

   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();
    }
}

測試結果:

 

總結:裝飾模式在不改變原先核心功能的情況下,可以實現增強,並且不會產生很多繼承類,按照業務模塊划分,通過不同的方法進行裝飾。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM