当我们继承一个类时我们可以得到该类的部分方法和属性,修饰者模式在一定程度上可以作为替换继承的一种方案。它可以动态扩展对象的功能并且透明化。
修饰者模式需要具备以下三种要求。
1.装饰者要关联一个被装饰者。
2.装饰者要实现被装饰者同样的接口。
3.对于不需要增强的方法,可直接调用被装饰者的方法。
定义规范的接口
public interface animal {
public abstract void eat();
public abstract void exercise();
}
实现接口的被装饰者
public class dog implements animal {
@Override
public void eat() {
System.out.println("啃骨头");
}
@Override
public void exercise() {
System.out.println("跑");
}
}
实现接口并关联被装饰者的装饰者
public class Huskie implements animal {
//获取一个被装饰者的对象
private dog d;
@Override
public void eat() {
d.eat();
}
@Override
public void exercise() {
d.exercise();
System.out.println("拆家");
}
}
装饰者模式相对于继承而言更加具有灵活性同时可实现多种组合方式。
原文:https://www.cnblogs.com/zrx7/p/11406857.html