一.装饰器模式
允许向一个现有的对象添加新的功能,同时又不改变其结构
加入你有一个产品,只有两个功能,现在你想让他新增功能,两种方法.
一是实现其子类,续写功能
这是在类层级上进行扩展,是静态的
二是实现装饰器
不改变原有逻辑,拿到对象即可进行拓展,是动态的
当然,原产品和新产品都继承同一模板
二.java代码实现
//模板接口
interface template{
void function1();
}
//原产品
class Product implements template{
//老功能
@Override
public void function1() {
System.out.println("唱");
System.out.println("跳");
}
}
//升级后的产品
class ProductPuls implements template{
//拿到原产品对象
template product_min ;
ProductPuls(template product_min){
this.product_min = product_min;
}
@Override
public void function1() {
product_min.function1();
}
//新功能
public void function2(){
System.out.println("rap");
System.out.println("篮球");
}
}
测试
public static void main(String[] args) {
template product_min = new ProductPuls(new Product());
product_min.function1();
((ProductPuls) product_min).function2();
}
这个构造方式是不是和java的IO有点像,没错,JOK中IO用了大量的装饰器模式