裝飾模式:又名包裝(Wrapper)模式,裝飾模式以對客戶端透明的方式擴展對象的功能,是繼承關系的一個替代方案。
裝飾模式可以在不創造更多的子類的模式下,將對象的功能加以擴展。
經典代碼:
//裝飾模式interface Phone {public abstract void call();
}class Iphone implements Phone {public void call() {System.out.println("手機可以打電話了");}
}abstract class PhoneDecorate implements Phone{private Phone p;public PhoneDecorate(Phone p){this.p=p;}public void call(){this.p.call();}
}class RingPhoneDecorate extends PhoneDecorate{public RingPhoneDecorate(Phone p){super(p);}public void call(){System.out.println("手機可以聽彩鈴了");super.call();}
}class MusicPhoneDecorate extends PhoneDecorate{public MusicPhoneDecorate(Phone p){super(p);}public void call(){super.call();System.out.println("手機可以聽音樂了");}
}class PhoneDemo{public static void main(String[] args){Phone p = new Iphone();p.call();System.out.println("----------------");PhoneDecorate pd = new RingPhoneDecorate(p);pd.call();System.out.println("----------------");pd = new RingPhoneDecorate(new MusicPhoneDecorate(p));pd.call();}
}
運行結果:
手機可以打電話了
手機可以聽彩鈴了
手機可以打電話了
手機可以聽彩鈴了
手機可以打電話了
手機可以聽音樂了