装饰者模式
这种类型的设计模式属于结构型模式,它调整了代码结构。
装饰器模式顾名思义是将类进行包装增强的一种模式 ,他与桥接模式相反 桥接模式是类似于空出一块交给别人处理以实现扩展, 装饰者模式是将这个类,增加代码以实现扩展 可以说桥接模式是向内扩展 装饰者模式是向外扩展
他们的不同主要是:
1. 思路出发点的不同
2. 和桥接模式相反他的主要部分相当于是桥接模式中空出来的那一部分 那么扩展这一部分需要与原来部分相同(实现接口或继承原来父类类) 来保证他的性质(类的类型)不发生改变
以包装礼物为例
//Gift 礼物的抽象类
public abstract class Gift{
private double size;
private double price;
public double getSize() {
return size;
}
public void setSize(double size) {
this.size = size;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public abstract double cost();
}
//礼物的实现类 对这个类进行包装 若要不同对的礼物可以写子类来设置不同的参数
public class GifteExtend extends Gift{
public GifteExtend(){
setPrice(100.5);
setSize(500);
}
@Override
public double cost() {
return super.getPrice() + super.getSize();
}
}
//装饰器类 将原来方法进行包装扩展功能 但是用户不应感觉到任何区别
//继承Gift类保证包装后的类的类型不发生改变
//通过构造器来传入被包装类来减小耦合
//若想设置不同类型的case来进行包装可以写一个子类设置不同的属性值
public class Case extends Gift{
private Gift gift;
public Case(Gift gift){
setPrice(100);
setSize(500);
this.gift = gift;
}
//对目标方法进行增强
@Override
public double cost() {
return gift.cost() + this.getPrice()*this.getSize();
}