装饰模式:又名包装(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(); } }运行结果:
手机可以打电话了
手机可以听彩铃了 手机可以打电话了
手机可以听彩铃了 手机可以打电话了 手机可以听音乐了