中國行動電話使用者已達 16.08 億戶,普及率為 113.9%
阿新 • • 發佈:2021-06-23
裝飾器模式
定義:不改變原類檔案和繼承關係的情況下,動態擴充套件一個物件的功能。他是通過建立一個包裝物件。
使用場景:不想使用繼承,但又要在原有基礎上增加額外功能。如一部手機,給他增加一個手機殼,再增加一個保護膜。
結構:
- 抽象構件(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();
}