interface State { // 定义一个接口
void opera(); // 接口方法
}
abstract class AbstractState implements State { // 定义抽象层
protected State source;
public AbstractState(State state) { //通过构造方法注入对象
source = state;
}
@Override
final public void opera() { // 这里是装饰模式运作的关键
if (source != null)
source.opera();
acturel();
}
abstract void acturel(); // 每个子类负责的方法
}
/
class AState extends AbstractState {
public AState(State state) {
super(state);
}
@Override
void acturel() {
System.out.println("AState acturel print");
}
}
/
class BState extends AbstractState {
public BState(State state) {
super(state);
}
@Override
void acturel() {
System.out.println("BState acturel print");
}
}
//
class CState extends AbstractState {
public CState(State state) {
super(state);
}
@Override
void acturel() {
System.out.println("CState acturel print");
}
}
//
public class Context {
public static void main(String[] args) {
State aState = new AState(null); //这里不够优雅,建议大家自己看看《大话设计模式》中此模式的实现方式
State bState = new BState(aState);
State cState = new CState(bState);
cState.opera();
}
}
打印结构:
AState acturel print
BState acturel print
CState acturel print
ps:本来打算写状态模式的,所以文章出现了State单词,见谅。本文参考了《大话设计模式》,但好像被我改动了下结构,但应该思想还是一样的,书中的注入方式为set,我这里使用的是构造方法。有错误请指出,谢谢。