设计模式之责任链模式17

设计模式之责任链模式17

背景

古代之三从四德,未婚从父,已婚从夫,丧父从子。女子如果想去逛街,先得请示父亲,如果父亲不在则请求丈夫,如果丈夫不在则请求儿子。抽象一下表达。

对象拆分:女人(女子),男人(父亲,丈夫,儿子),动作拆分:男子批准女子的逛街请求。男子对象拥有该动作。(基于,谁拥有动作,方法则属于那个对象)

类图

设计模式之责任链模式

代码实现

抽象女子接口

public interface IWoman {

    //获取女子的级别,三从四德,1未婚,2已婚,3丧夫
    public int getType();

    //获取女子的各种请求
    public String getRequest();

}

具体的定义一个妹子


public class Woman implements IWoman{

    //级别,1未婚,2已婚,3丧夫
    private int type = 0;

    //请求内容
    private String request = "";

    public Woman(int _type, String _request) {
        this.type = _type;
        this.request = _request;
    }

    public int getType() {
        return type;
    }

    public String getRequest() {
        return request;
    }

}

男子对象抽象类,用来被父亲,丈夫,儿子所继承

public abstract class Handler {

    //对应的级别,1父亲,2丈夫,3儿子
    private int type;

    //如果该环节无法处理,那么下一个节点处理
    private Handler next;

    public Handler(int _type) {
        this.type = _type;
    }

    public void setNext(Handler _next) {
        this.next = _next;
    }

    public void handleMessage(Woman woman) {
        if(woman.getType() == this.type) {
            this.response(woman);
        }else {
            if(next != null) {
                this.next.handleMessage(woman);
            }else {
                System.out.println("没人了,无法传递");
            }
        }
    }

    public abstract void response(Woman woman);
}

父亲

public class Father extends Handler {

    public Father(int _type) {
        super(1);
    }

    @Override
    public void response(Woman woman) {
        System.out.println("请求得到父亲的同意");
        System.out.println(woman.getRequest());
        System.out.println("父亲:已同意\n");
    }

}

丈夫


public class Husband extends Handler {

    public Husband(int _type) {
        super(2);
    }

    @Override
    public void response(Woman woman) {
        System.out.println("请求得到丈夫的同意");
        System.out.println(woman.getRequest());
        System.out.println("丈夫:已同意\n");
    }

}

儿子

public class Son extends Handler {

    public Son(int _type) {
        super(3);
    }

    @Override
    public void response(Woman woman) {
        System.out.println("请求得到儿子的同意");
        System.out.println(woman.getRequest());
        System.out.println("儿子:已同意\n");
    }

}

客户端调用

public class Client {

    public static void main(String[] args) {
        Handler father = new Father(1);
        Handler husband = new Husband(2);
        Handler son = new Son(3);

        father.setNext(husband);
        husband.setNext(son);

        for(int i=0; i<5; i++) {
            int a = new Random().nextInt(3) + 1;
            Woman woman = new Woman(a, "我想去逛街");
            father.handleMessage(woman);
        }

    }
}

运行结果

请求得到父亲的同意
我想去逛街
父亲:已同意

请求得到父亲的同意
我想去逛街
父亲:已同意

请求得到丈夫的同意
我想去逛街
丈夫:已同意

请求得到父亲的同意
我想去逛街
父亲:已同意

请求得到儿子的同意
我想去逛街
儿子:已同意
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值