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