装饰器模式
动态的给类添加一些额外的职责,而不是给类添加。这里io类里面大量用到了该模式。
1. 使用场景
在需要不影响其他对象的情况下,动态透明的给单个对象添加扩展功能。可以在不生成很多子类的情况下扩展类功能。
可以动态扩展和撤销功能。
2. 角色
- Component 抽象组件 被装饰对象的原始抽象接口
- ConcreteComponent 组件具体实现类 即具体的被装饰类
- Decorator 抽象装饰者 持有被装饰对象的引用,可以进行装饰
- ConcreteDecorator 装饰着具体实现类 装饰者具体实现
3. 实践
// 1. 定义抽象组件
public abstract class Component {
public abstract void operate();
}
// 2. 定义具体组件
public class ConcreteComponent extends Component {
@Override
public void operate() {
System.out.println("这是具体组件!");
}
}
// 3. 定义抽象装饰器类,该类需要继承抽象组件,添加抽象装饰方法
public abstract class Decorator extends Component {
Component mComponent;
public Decorator(Component component) {
mComponent = component;
}
@Override
public void operate() {
mComponent.operate();
}
public abstract void operateA();
public abstract void operateB();
}
// 4. 定义具体装饰器类,
public class ConcreteDecoratorA extends Decorator {
public ConcreteDecoratorA(Component component) {
super(component);
}
@Override
public void operate() {
operateA();
super.operate();
operateB();
}
public void operateA() {
System.out.println("自定义装饰部分:start");
}
public void operateB() {
System.out.println("自定义装饰部分:end");
}
}
// 客户端具体调用
Component component = new ConcreteComponent();
Decorator decorator = new ConcreteDecoratorA(component);
decorator.operate();
4. 总结
装饰器模式比价好理解,装饰更多的是锦上添花,在被装饰方法的前后添加装饰方法。
一个人 经过装饰之后,不仅还是一个人(通过抽象装饰类继承抽象人来实现),而且用户了抽象装饰器定义的方法,原有方法经过覆写之后还可以增加装饰功能。相当于对原有方法进行了一次封装,添加了装饰方法。

被折叠的 条评论
为什么被折叠?



