一、测试类
package com.zhou.test;
public class TestDecorate {
public static void main(String[] args) {
Phone phone = new Iphone();
phone.call();
System.out.println("=========================");
Decorate decorate = new RingDecorate(phone);
decorate.call();
System.out.println("=========================");
decorate = new MusicDecorate(phone);
decorate.call();
System.out.println("=========================");
decorate = new RingDecorate(new MusicDecorate(phone));
decorate.call();
System.out.println("=========================");
decorate = new MusicDecorate(new RingDecorate(phone));
decorate.call();
}
}
二、接口
package com.zhou.test;
public interface Phone {
public void call();
}
三、接口的实现
package com.zhou.test;
public class Iphone implements Phone {
@Override
public void call() {
System.out.println("可以打电话");
}
}
四、装饰者的抽象类,实现phone接口
package com.zhou.test;
public abstract class Decorate implements Phone {
private Phone phone;
public Decorate(Phone phone) {
this.phone = phone;
}
@Override
public void call() {
//这里容易错
this.phone.call();
}
}
五、具体的装饰
package com.zhou.test;
public class RingDecorate extends Decorate{
public RingDecorate(Phone phone) {
super(phone);
}
@Override
public void call() {
System.out.println("我可以彩铃");
super.call();
}
}
六、具体的装饰
package com.zhou.test;
public class MusicDecorate extends Decorate{
public MusicDecorate(Phone phone) {
super(phone);
}
@Override
public void call() {
System.out.println("我可以放MP3");
super.call();
}
}