1.装饰器模式
public interface Phone {
void call();
}
public class IPhone implements Phone {
@Override
public void call() {
System.out.println("使用苹果手机打电话");
}
}
/**
* 装饰模式
*
* 1:装饰类,需要去实现被装饰类接口
* 2:装饰类的本质是对已有的类进行功能增强,装饰器模式以多客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。
*
* 特点:
* 1:外表看起来是被装饰类的接口表示形式
* 2:内在其实使用的是被装饰类本身的功能,只是在此基础之上进行增强。
*
*
*/
public class PhoneDecorate implements Phone{
//被装饰的类的实例,该实例由外部传入
private Phone phone;
//通过构造方法传入被装饰类的实例
public PhoneDecorate(Phone phone){
this.phone = phone;
}
//对被装饰类的打电话功能进行装饰,使其功能增强
@Override
public void call() {
//依然使用的是被装饰类的手机去打电话
phone.call();
System.out.println("听音乐");
}
}
public static void main(String[] args) {
Phone phone = new IPhone();
phone.call();
System.out.println("===========");
//Phone phone2 = new PhoneDecorate(new IPhone());
Phone phone2 = new PhoneDecorate(phone);
phone2.call();
}