装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。 这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
意图
- 动态地给一个对象添加一些额外的职责。
- 就增加功能来说,装饰器模式相比生成子类更为灵活。
主要解决
- 一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。
案例
在不修改原有的方法的条件下,给该方法功能。
1、原有接口类,实现类
public interface Human {
void height();
}
public class ShortMan implements Human{
@Override
public void height() {
System.out.println("我很矮");
}
}
public class TallMan implements Human{
@Override
public void height() {
System.out.println("我很高");
}
}
2、抽象修饰类
package decorator;
public abstract class HumanDecorator implements Human{
protected Human humanDecorator;
public HumanDecorator(Human humanDecorator) {
this.humanDecorator = humanDecorator;
}
@Override
public void height() {
humanDecorator.height();
}
}
3、具体的修饰类
package decorator;
public class GoodHumanDecorator extends HumanDecorator{
public GoodHumanDecorator(Human humanDecorator) {
super(humanDecorator);
}
@Override
public void height() {
humanDecorator.height();
System.out.println("但是我很厉害");
}
}
4、测试
package decorator;
public class Test {
public static void main(String[] args) {
new TallMan().height();
new ShortMan().height();
System.out.println("===================");
new GoodHumanDecorator(new ShortMan()).height();
}
}
|