博客
关于我
设计模式-职责链模式
阅读量:153 次
发布时间:2019-02-27

本文共 1599 字,大约阅读时间需要 5 分钟。

职责链模式的核心在于如何将请求的处理与请求的发送分离开来,让请求发送者无需关心请求的具体处理流程,仅需将请求发送到职责链中即可。这种设计方式能够有效地解耦请求的发送者和处理者,使得系统的模块化程度更高。

设置处理请求的接口

职责链模式的实现通常从一个抽象的接口开始。我们定义了一个Handler接口,包含以下两个主要方法:

  • SetSuccessor(Handler successor):用于设置请求的传递接收者。
  • HandlerRequest(int request):这是一个抽象方法,子类需要实现具体的请求处理逻辑。
  • 通过这种方式,我们可以确保每个处理者都能明确地定义自己能处理的请求范围,并将无法处理的请求传递给下一个处理者。

    具体处理类

    在职责链模式中,每个处理者都需要实现HandlerRequest方法。我们可以通过具体的子类来实现不同的请求处理逻辑。以下是一个典型的实现示例:

    class ConreteHandler1 implements Handler {    public void SetSuccessor(Handler successor) {        this.successor = successor;    }    public void HandlerRequest(int request) {        if (request >= 0 && request < 10) {            // 处理本类范围内的请求            System.out.println("{0} 处理请求 {1}", this.getClass().getName(), request);        } else {            // 将请求传递给下一个处理者            if (successor != null) {                successor.HandlerRequest(request);            }        }    }}

    类似的,其他处理类(如ConreteHandler2ConreteHandler3)只需要根据自身的业务逻辑调整请求处理条件,其结构与ConreteHandler1完全一致。

    客户端实现

    职责链模式的真正优势体现在客户端的使用上。客户端只需创建处理者实例并设置它们之间的关系,就能实现请求的分级处理。以下是客户端代码的实现示例:

    public static void Main(string[] args) {    Handler h1 = new ConreteHandler1();    Handler h2 = new ConreteHandler2();    Handler h3 = new ConreteHandler3();    h1.SetSuccessor(h2);    h2.SetSuccessor(h3);    int[] requests = { 2, 4, 5, 7, 8, 12, 23, 27, 6 };    foreach (int request in requests) {        h1.HandlerRequest(request);    }    Console.ReadKey();}

    通过上述代码,我们可以看到客户端的主要工作是:

  • 创建三个处理者实例。
  • 为每个处理者设置下一个处理者的引用。
  • 启动请求处理过程。
  • 优化后的职责链模式

    在实际应用中,可以通过动态设置处理者的关系来实现灵活的请求路由。这种方式能够有效地支持请求的分级处理,确保请求总能被正确传递给具有相应权限的处理者。

    通过这种设计,我们可以同时满足单一职责原则和开闭原则,使系统更加灵活且易于维护。

    转载地址:http://dtsb.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现extended euclidean algorithm扩展欧几里得算法(附完整源码)
    查看>>
    Objective-C实现ExtendedEuclidean扩展欧几里德GCD算法(附完整源码)
    查看>>
    Objective-C实现external sort外排序算法(附完整源码)
    查看>>
    Objective-C实现Factorial digit sum阶乘数字和算法(附完整源码)
    查看>>
    Objective-C实现factorial iterative阶乘迭代算法(附完整源码)
    查看>>
    Objective-C实现factorial recursive阶乘递归算法(附完整源码)
    查看>>
    Objective-C实现factorial阶乘算法(附完整源码)
    查看>>
    Objective-C实现factorial阶乘算法(附完整源码)
    查看>>
    Objective-C实现Factors因数算法(附完整源码)
    查看>>
    Objective-C实现Farey Approximation近似算法(附完整源码)
    查看>>
    Objective-C实现Fast Powering算法(附完整源码)
    查看>>
    Objective-C实现Fedwick树算法(附完整源码)
    查看>>
    Objective-C实现fenwick tree芬威克树算法(附完整源码)
    查看>>
    Objective-C实现FenwickTree芬威克树算法(附完整源码)
    查看>>
    Objective-C实现fermat little theorem费马小定理算法(附完整源码)
    查看>>
    Objective-C实现FermatPrimalityTest费马素数测试算法(附完整源码)
    查看>>
    Objective-C实现fft2函数功能(附完整源码)
    查看>>
    Objective-C实现FFT快速傅立叶变换算法(附完整源码)
    查看>>
    Objective-C实现FFT算法(附完整源码)
    查看>>
    Objective-C实现fibonacci search斐波那契查找算法(附完整源码)
    查看>>