2020-01-07
先看效果:
//装饰模式 测试
private void decorateTest() {
System.out.println("——————————————————————————");
//爱疯手机
Phone phone = new IPhone();
phone.call();
System.out.println("——————————————————————————");
//彩铃手机
Phone ringPhone = new RingPhoneDecorate(phone);
ringPhone.call();
System.out.println("——————————————————————————");
//音乐手机
Phone musicPhone = new MusicPhoneDecorate(phone);
musicPhone.call();
System.out.println("——————————————————————————");
//又有彩铃,又有音乐的手机
Phone ringMusicPhone = new MusicPhoneDecorate(ringPhone);
ringMusicPhone.call();
System.out.println("——————————————————————————");
}
###输出结果:
——————————————————————————
爱疯打电话
——————————————————————————
彩铃响起
爱疯打电话
——————————————————————————
爱疯打电话
音乐响起
——————————————————————————
彩铃响起
爱疯打电话
音乐响起
——————————————————————————
开始写:

/**
* 手机接口
*/
public interface Phone {
void call();
}
/**
* 爱疯手机
*/
public class IPhone implements Phone {
@Override
public void call() { //基础功能:打电话
System.out.println("爱疯打电话");
}
}
到此,已有手机类,下面给手机定义装饰类
抽象装饰类:
/**
* 手机装饰类
*/
abstract class PhoneDecorate implements Phone {
private Phone phone;
/**
* 给手机装饰,所以要传手机
*
* @param phone 被装饰的手机
*/
public PhoneDecorate(Phone phone) {
this.phone = phone;
}
@Override
public void call() {
this.phone.call();
}
}
具体装饰类:
/**
* 彩铃装饰
*/
public class RingPhoneDecorate extends PhoneDecorate {
/**
* 给手机装饰,所以要传手机
*
* @param phone 被装饰的手机
*/
public RingPhoneDecorate(Phone phone) {
super(phone);
}
@Override
public void call() {
System.out.println("彩铃响起");
super.call();
}
}
/**
* 音乐装饰
*/
public class MusicPhoneDecorate extends PhoneDecorate {
/**
* 给手机装饰,所以要传手机
*
* @param phone 被装饰的手机
*/
public MusicPhoneDecorate(Phone phone) {
super(phone);
}
@Override
public void call() {
super.call();
System.out.println("音乐响起");
}
}
完事儿
网友评论