1. 程式人生 > 資訊 >中國行動電話使用者已達 16.08 億戶,普及率為 113.9%

中國行動電話使用者已達 16.08 億戶,普及率為 113.9%

裝飾器模式

定義:不改變原類檔案和繼承關係的情況下,動態擴充套件一個物件的功能。他是通過建立一個包裝物件。

使用場景:不想使用繼承,但又要在原有基礎上增加額外功能。如一部手機,給他增加一個手機殼,再增加一個保護膜。

結構:

  • 抽象構件(Component):定義一個抽象介面
  • 具體構件(ConcreteComponent):實現抽象構件
  • 抽象裝飾(Decorator):繼承抽象構件,幷包含具體構件的例項,可以通過其子類擴充套件具體構件的功能
  • 具體裝飾(ConcreteDecorator):實現抽象裝飾的相關方法,並給具體構件物件新增附加功能

給一個只有打電話功能的手機增加功能。

程式碼示例:

public interface IPhone {
    void call();
}
public class Xiaomi implements IPhone {
    @Override
    public void call() {
        System.out.println("我有打電話的功能");
    }
}
public class DecoratorPhone implements IPhone{

    private IPhone iPhone;

    public DecoratorPhone(IPhone iPhone) {
        this.iPhone = iPhone;
    }

    @Override
    public void call(){
        iPhone.call();
    }
}


public class MusicPhone extends DecoratorPhone {

    public MusicPhone(IPhone iPhone) {
        super(iPhone);
    }

    @Override
    public void call() {
        super.call();
        System.out.println("我有了播放音樂功能");
    }
}
public class PlayGamePhone extends DecoratorPhone {

    public PlayGamePhone(IPhone iPhone) {
        super(iPhone);
    }

    @Override
    public void call() {
        super.call();
        System.out.println("我有了打遊戲功能");
    }
}

測試程式碼:

 public static void main(String[] args) throws InterruptedException, CloneNotSupportedException {
        IPhone iPhone=new Xiaomi();
        IPhone musicPhone=new MusicPhone(iPhone);
        IPhone playPhone=new PlayGamePhone(musicPhone);
        playPhone.call();

    }

返回目錄