装饰模式
应用场景:
最基础用法:
当需要对类A的对象添加一些自定义不同的方法时,直接在类A中添加方法不太好!那么需要一个类B继承类A,类B里面增加一个类A的对象作为自己的成员并自定义一个方法Bfunc,再重载类A中的某个方法func,在该方法里面调用自己的Bfunc。
高级用法:假设要对男英雄和女英雄进行装饰(技能加点),那么他们应该都实现同一个接口(英雄),而装饰者也有不同类型(学习qwer技能)所以也应该实现同一个总装饰接口或者抽象类(学习技能)但由于装饰模式的含义是在原有基础上添加新方法,所以总装饰接口应当保留英雄的基本属性(即应当实现接口:英雄),具体看代码
// 组件接口(英雄)
public interface Component {
void operation();
}
// 具体组件类(男英雄或女英雄)
public class ConcreteComponent implements Component {
@Override
public void operation() {
System.out.println("ConcreteComponent: 男英雄的基本操作");
}
}
// 装饰抽象类(学习技能)
public abstract class Decorator implements Component {
protected Component component; # 总装饰接口应当保留英雄的基本属性
public Decorator(Component component) {
this.component = component;
}
@Override # 实现了接口就要重写该接口里的函数
public void operation() {
component.operation(); // 调用原始组件的操作
}
}
// 具体装饰类A,增加额外功能(学习q技能)
public class ConcreteDecoratorA extends Decorator {
public ConcreteDecoratorA(Component component) {
super(component);
}
@Override
public void operation() {
super.operation(); // 执行原始组件的操作
addedBehavior(); // 增强操作
}
private void addedBehavior() {
System.out.println("ConcreteDecoratorA: 学习q技能");
}
}
标签:软件设计,Component,component,模式,public,接口,operation,装饰 From: https://www.cnblogs.com/torrentgz/p/18425393