设计模式-责任链模式

责任链模式

职责链模式定义如下:职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者 耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传 递请求,直到有对象处理它为止。职责链模式是一种对象行为型模式。

在职责链模式结构图中包含如下几个角色:
● Handler(抽象处理者):它定义了一个处理请求的接口,一般设计为抽象类,由于不同的 具体处理者处理请求的方式不同,因此在其中定义了抽象请求处理方法。因为每一个处理者 的下家还是一个处理者,因此在抽象处理者中定义了一个抽象处理者类型的对象(如结构图 中的successor),作为其对下家的引用。通过该引用,处理者可以连成一条链。

● ConcreteHandler(具体处理者):它是抽象处理者的子类,可以处理用户请求,在具体处理 者类中实现了抽象处理者中定义的抽象请求处理方法,在处理请求之前需要进行判断,看是 否有相应的处理权限,如果可以处理请求就处理它,否则将请求转发给后继者;在具体处理 者中可以访问链中下一个对象,以便请求的转发。

在职责链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这 个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上 的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织 链和分配责任

package com.example.demo.pattern.behavioral.chain;

/**
 * 功能描述: 责任链模式
 *  例子:富士康工厂生产手机 A负责装配,B负责贴膜,C负责测试 必须按ABC的顺序来
 * @author luxiaomeng
 * @date 2020/8/25   13:52
 * 修改日志: 暂无
 */
public class ChainOfResponsibility {
    public static void main(String[] args) {
        // 创建手机
        Phone phone = new Phone();
        // 创建责任链
        Handler a = new A();
        Handler b = new B();
        Handler c = new C();
        a.setNext(b);
        b.setNext(c);
        a.work(phone);
        //A组装了手机
        //B贴了膜
        //C进行了测试
        //手机制造完成
        
    }
}

class Phone {
    // 状态  1组装 2已贴膜 3已测试
    private int status =0;

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }
}

/**
 * 抽象处理类
 */
abstract class Handler {
    protected Handler next;

    public abstract void work(Phone phone);

    public Handler getNext() {
        return next;
    }

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

class A extends Handler {
    @Override
    public void work(Phone phone) {
        if (phone.getStatus() == 0) {
            System.out.println("A组装了手机");
            phone.setStatus(1);
            next.work(phone);
        }

    }
}
class B extends Handler {
    @Override
    public void work(Phone phone) {
        if (phone.getStatus() == 1) {
            System.out.println("B贴了膜");
            phone.setStatus(2);
            next.work(phone);
        }

    }
}
class C extends Handler {
    @Override
    public void work(Phone phone) {
        if (phone.getStatus() == 2) {
            System.out.println("C进行了测试");
            phone.setStatus(3);
            System.out.println("手机制造完成");
        }

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值