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