zoukankan      html  css  js  c++  java
  • CSharp设计模式读书笔记(14):职责链模式(学习难度:★★★☆☆,使用频率:★★☆☆☆)

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

    模式角色与结构:

    示例代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace CSharp.DesignPattern.ResponsibilityChainPattern
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 需要注意,职责链模式并不创建职责链,职责链的创建工作必须由系统的其他部分来完成,
                // 一般是在使用该职责链的客户端中创建职责链。
                Handler annal = new Director();
                Handler tony = new VicePresident();
                Handler marc = new President();
                Handler meeting = new Congress();
    
                annal.SetSuccessor(tony);
                tony.SetSuccessor(marc);
                marc.SetSuccessor(meeting);
    
                Console.WriteLine("Request: President"); 
                annal.HandleRequest("President");
    
                Console.ReadLine();
            }
        }
    
        // 抽象处理类
        abstract class Handler
        {
            protected Handler successor; // 维持对下家的引用
    
            public void SetSuccessor(Handler successor)
            {
                this.successor = successor;
            }
    
            public abstract void HandleRequest(String request);
        }
    
        // 具体处理类
        class Director : Handler
        {
            public override void HandleRequest(string request)
            {
                if (request == "Director")
                {
                    Console.WriteLine("Director Handle...");
                }
                else
                {
                    this.successor.HandleRequest(request); // 体现职责链
                }
            }
        }
    
        // 具体处理类
        class VicePresident : Handler
        {
            public override void HandleRequest(string request)
            {
                if (request == "VicePresident")
                {
                    Console.WriteLine("VicePresident Handle...");
                }
                else
                {
                    this.successor.HandleRequest(request); // 体现职责链
                }
            }
        }
    
        // 具体处理类
        class President : Handler
        {
            public override void HandleRequest(string request)
            {
                if (request == "President")
                {
                    Console.WriteLine("President Handle...");
                }
                else
                {
                    this.successor.HandleRequest(request); // 体现职责链
                }
            }
        }
    
        // 具体处理类
        class Congress : Handler
        {
            public override void HandleRequest(string request)
            {
                if (request == "Congress")
                {
                    Console.WriteLine("Congress Handle...");
                }
                else
                {
                    this.successor.HandleRequest(request); // 体现职责链
                }
            }
        }
    }
  • 相关阅读:
    Python3学习笔记(十七):requests模块
    fiddler(四)、断点(转)
    fiddler(三)、会话框添加显示请求方法栏
    PostgreSQL12同步流复制搭建-同步不生效的问题、主库恢复后,无法与新主库同步问题
    PostgreSQL的count(*) count(1) count(列名)的区别
    CentOS系统日志(转)
    常用PostgreSQL HA(高可用)工具收集
    转-性能优化中CPU、内存、磁盘IO、网络性能的依赖
    PostgreSQL查询数据库中包含某种类型的表有哪些
    PostgreSQL中with和without time zone两者有什么区别
  • 原文地址:https://www.cnblogs.com/thlzhf/p/3993743.html
Copyright © 2011-2022 走看看