设计模式の装饰模式

 

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,我这里使用的是构造方法。有错误请指出,谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值