設計模式之裝飾器模式

      裝飾器模式,顧名思義主要就是裝飾的作用,在不改變原有類的基礎上,添加一些裝飾功能,比如有一個汽車,汽車可以跑,但是你想要一個漂亮的汽車,你可以把它裝飾成你喜歡的顏色,或者你還可以改造它的外形,爲了不影響原有對象的結構,我們可以定義一個裝飾類,所有的裝飾都通過裝飾類來進行,這就是裝飾器模式。

1.創建汽車接口,汽車屬性是可以跑。


public interface Car {
  void run();
}

2.創建一個普通汽車類,並實現汽車接口。


public class NomalCar implements Car{
  @Override
  public void run() {
    System.out.println("車具有跑的功能");
  }
}

3.創建一個用於裝飾的抽象類。

public abstract class Decorator implements Car{
  protected Car car;
  public Decorator(Car car){
    this.car = car;
  }
  public void run(){
    car.run();
  }
}

4.創建一個改變汽車外形的裝飾類。


public class ShapeDecorator extends Decorator{

  public ShapeDecorator(Car car) {
    super(car);
  }
  public void run(){
    car.run();
    setShape(car);
  }
    private void setShape(Car car){
      System.out.println("給車設置成流線型");
    }
}

5.測試類。

public class DecoratorTest {  public static void main(String[] args){    Car nomalCar = new NomalCar();    nomalCar.run();    Car shapeCar = new ShapeDecorator(new NomalCar());    shapeCar.run();  } }

測試結果:


車具有跑的功能
車具有跑的功能
給車設置成流線型

從結果可以看出來,我們的外型裝飾類,把車成功裝飾成了流線型。

6.我們再對車的顏色進行裝飾。


public class ColorDecorator extends Decorator{
  public ColorDecorator(Car car) {
    super(car);
  }
  public void run(){
    car.run();
    setColor(car);
  }
  private void setColor(Car car){
    System.out.println("把車設置成漂亮的紅色");
  }
}

測試類:


public static void main(String[] args){
    Car nomalCar = new NomalCar();
    nomalCar.run();
    Car colorCar = new ColorDecorator(new NomalCar());
    colorCar.run();
  }

測試結果:

車具有跑的功能
車具有跑的功能
把車設置成漂亮的紅色

 

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