`
Linkcqu
  • 浏览: 14594 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

设计模式 - Chain of Responsibility Pattern(责任链模式)

阅读更多

介绍
为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。

示例
有一个Message实体类,某个类对它的操作有Insert()方法。现在要求根据插入信息的字符长度,让不同的对象去处理,这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。

(图示 见附件)

MessageModel

using System;
using System.Collections.Generic;
using System.Text; 

namespace Pattern.ChainOfResponsibility
{ 
    /**//// <summary> 


    /// Message实体类
    /// </summary>
    public class MessageModel
    { 

        /**//// <summary> 
        /// 构造函数
     /// </summary>
        /// <param name="msg">Message内容</param> 
        /// <param name="pt">Message发布时间</param>
        public MessageModel(string msg, DateTime pt)
        { 
            this._message = msg;
            this._publishTime = pt;
        }

        private string _message; 
        /**//// <summary> 
        /// Message内容
        /// </summary>
        public string Message
        { 
            get { return _message; } 
            set { _message = value; } 

        }

        private DateTime _publishTime;
        /**//// <summary> 
        /// Message发布时间
        /// </summary>
        public DateTime PublishTime
        { 

            get { return _publishTime; } 

            set { _publishTime = value; } 
        }
    }
}

 

 

SqlMessage

 

using System;
using System.Collections.Generic; 
using System.Text;

namespace Pattern.ChainOfResponsibility
{ 
    /**//// <summary> 

    /// Sql方式操作Message
    /// </summary>
    public class SqlMessage
    { 
        /**//// <summary> 
        /// 插入Message
        /// </summary>
        /// <param name="mm">Message实体对象</param> 
        /// <returns></returns>
        public bool Insert(MessageModel mm)
        { 
            // 代码略
            return true;
        }
    }
} 

 

 

 

AbstractExecutor

 

using System;
using System.Collections.Generic;
using System.Text;

namespace Pattern.ChainOfResponsibility 

{
    /**//// <summary> 
    /// 抽象处理者(Handler)角色
    /// </summary>
    public abstract class AbstractExecutor
    { 

        /**//// <summary>  
        /// 抽象处理者(Handler)角色
        /// </summary>
        protected AbstractExecutor _executor;

        /**//// <summary> 
        /// 设置责任链的上一级对象
        /// </summary>
        /// <param name="executor"></param>
        public void SetSuccessor(AbstractExecutor executor) 


        {
            this._executor = executor; 

        }

        /**//// <summary> 

        /// 插入Message
        /// </summary>
        /// <param name="mm">Message实体对象</param> 
        /// <returns>执行者;内容;时间</returns>
        public abstract string Insert(MessageModel mm);
    } 
}

 

 

 

Employee

using System;
using System.Collections.Generic;
using System.Text;

namespace Pattern.ChainOfResponsibility 
{
    /**//// <summary> 
    /// 具体处理者(ConcreteHandler)角色
    /// </summary>
    public class Employee : AbstractExecutor
    { 
        /**//// <summary> 

        /// 插入Message
        /// </summary>
        /// <param name="mm">Message实体对象</param> 
        /// <returns>执行者;内容;时间</returns>
        public override string Insert(MessageModel mm)
        { 
            string rtn = "";

            // 插入的信息字符数小于5
            if (mm.Message.Length < 5) 
            { 

                SqlMessage m = new SqlMessage();

                if (m.Insert(mm))
                { 
                    rtn = "执行者:雇员" + " 内容:" + mm.Message + " 时间:" + mm.PublishTime.ToString(); 

                }
            }
            // 否则让上级去执行
            else if (base._executor != null) 

            { 

                rtn = _executor.Insert(mm);
            }

            return rtn;
        }
    } 
}

 

 

Leader

using System;
using System.Collections.Generic;
using System.Text;

namespace Pattern.ChainOfResponsibility 

{
    /**//// <summary> 
    /// 抽象处理者(Handler)角色
    /// </summary>
    public class Leader : AbstractExecutor
    { 
        /**//// <summary> 
        /// 插入Message
        /// </summary>
        /// <param name="mm">Message实体对象</param> 
        /// <returns>执行者;内容;时间</returns>
        public override string Insert(MessageModel mm)
        { 
            string rtn = "";

            // 插入的信息字符数小于10
            if (mm.Message.Length < 10) 
            { 
                SqlMessage m = new SqlMessage();

                if (m.Insert(mm))
                { 
                    rtn = "执行者:主管" + " 内容:" + mm.Message + " 时间:" + mm.PublishTime.ToString(); 
                }
            }
            // 否则让上级去执行
            else if (base._executor != null) 
            { 
                rtn = _executor.Insert(mm);
            }

            return rtn;
        }
    } 

}

 

 

Manager

using System;
using System.Collections.Generic;
using System.Text;

namespace Pattern.ChainOfResponsibility 

{
    /**//// <summary> 
    /// 抽象处理者(Handler)角色
    /// </summary>
    public class Manager : AbstractExecutor
    { 


        /**//// <summary> 

        /// 插入Message
        /// </summary>
        /// <param name="mm">Message实体对象</param> 


        /// <returns>执行者;内容;时间</returns>
        public override string Insert(MessageModel mm)
        { 
            string rtn = "";

            // 插入的信息字符数小于15
            if (mm.Message.Length < 15) 
            { 

                SqlMessage m = new SqlMessage();

                if (m.Insert(mm))
                { 
                    rtn = "执行者:经理" + " 内容:" + mm.Message + " 时间:" + mm.PublishTime.ToString(); 

                }
            }
            else
            { 

                rtn = "你所插入的Message不符合要求";
            }

            return rtn;
        } 


    }
}

 

 

client

using System;
using System.Data;
using System.Configuration; 


using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts; 


using System.Web.UI.HtmlControls;

using Pattern.ChainOfResponsibility;

public partial class ChainOfResponsibility : System.Web.UI.Page
{ 
    protected void Page_Load(object sender, EventArgs e)
    { 

        AbstractExecutor employee = new Employee();
        AbstractExecutor leader = new Leader();
        AbstractExecutor manager = new Manager(); 
        employee.SetSuccessor(leader);
        leader.SetSuccessor(manager);

        Response.Write(employee.Insert(new MessageModel("abcd", DateTime.Now)));
        Response.Write("<br />"); 

        Response.Write(employee.Insert(new MessageModel("abcdefgh", DateTime.Now)));
        Response.Write("<br />");
        Response.Write(employee.Insert(new MessageModel("abcdefghigkl", DateTime.Now))); 

        Response.Write("<br />");
        Response.Write(employee.Insert(new MessageModel("abcdefghigklmnop", DateTime.Now)));
    }
} 

 

 


运行结果
执行者:雇员 内容:abcd 时间:2007-4-22 20:04:41
执行者:主管 内容:abcdefgh 时间:2007-4-22 20:04:41
执行者:经理 内容:abcdefghigkl 时间:2007-4-22 20:04:41
你所插入的Message不符合要求

  • 大小: 37.3 KB
分享到:
评论

相关推荐

    c++-设计模式之责任链模式(Chain of Responsibility Pattern)

    责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许将请求的发送者和接收者解耦。通过将请求沿着处理链传递,直到有对象处理该请求为止,这种模式避免了请求发送者与具体处理者之间的紧...

    C#设计模式-吕震宇

    设计模式(17)-Chain of Responsibility Pattern 设计模式(16)-Bridge Pattern 设计模式(15)-Facade Pattern 设计模式(14)-Flyweight Pattern C#设计模式(13)-Proxy Pattern C#设计模式(12)-...

    java设计模式---诙谐易懂版

    代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法...责任链模式(Chain of Responsibility Pattern)、访问者模式(Visitor Pattern)、状态模式(State Pattern)、原型模式(Prototype Pattern...

    chain of responsibility 职责链模式(行为模式)

    职责链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许将请求的发送者和接收者解耦,使得多个对象都有可能处理一个请求,而无需显式指定接收者。在这个模式中,请求沿着一个处理者链进行传递,...

    java常用设计模式-责任链模式

    责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许将请求沿着处理链进行传递,直到有一个处理程序处理它为止。在 Java 中实现责任链模式通常需要以下几个步骤: 定义处理器接口 首先,...

    Java设计模式--责任链模式.docx

    责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它使你能在不明确指定接收者的情况下,将请求沿着处理者对象的链式结构进行传递。每个处理者对象都包含对下一个处理者的引用,如果某个处理者...

    C#版 24种设计模式

    适配器模式(Adapter Pattern) 提供者模式(Provider Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 原型模式(Prototype Pattern) 责任链模式(Chain of Responsibility Pattern) 中介者模式...

    JAVA设计模式-chm版

    包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式(Observer)、状态模式...

    design-pattern-java.pdf

    十一个行为型模式 十一个行为型模式 职责链模式-Chain of Responsibility Pattern 请求的链式处理——职责链模式(一) 请求的链式处理——职责链模式(二) 请求的链式处理——职责链模式(三) 请求的链式处理——...

    JAVA设计模式之行为模式 责任链模式和状态模式

    本篇将探讨两种重要的行为设计模式:责任链模式(Chain of Responsibility Pattern)和状态模式(State Pattern)。 **责任链模式**是一种使多个对象都有机会处理请求的模式,避免请求发送者与接收者之间的耦合。在...

    design-pattern-chain-of-responsibility:created旨在研究责任链设计模式的项目:chains:

    该项目是作为帖子的材料开发的: : 运行这个项目 进行此操作的节点的版本: v12.18.0 (此信息可能有用..我不知道.. :thinking_face: ) 安装依赖项: npm install 编译打字稿并运行编译后的 ...

    设计模式 - Design Pattern

    - 责任链(Chain of Responsibility):避免对象之间紧密耦合,允许将请求沿着处理者链传递,直到有对象处理为止。 - 命令(Command):将请求封装为一个对象,以便使用不同的请求、队列请求、或者支持可撤销的...

    设计模式 DesignPattern 供应链

    "供应链"模式,通常指的是责任链(Chain of Responsibility)设计模式,它是面向对象设计中的一种行为模式。 责任链模式的核心思想是将请求的发送者和接收者解耦,通过将一系列处理者(Handler)对象串联成一个链,...

    用Java实现23种设计模式

    责任链模式(Chain of Responsibility Pattern) 命令模式(Command Pattern) 解释器模式(Interpreter Pattern) 迭代器模式(Iterator Pattern) 中介者模式(Mediator Pattern) 备忘录模式(Memento ...

    CoreJava-DesignPattern

    CoreJava-DesignPattern 创意设计模式 -- Abstract Factory - Done ... -- Chain of Responsibility -- Command -- Interpreter -- Iterator -- Mediator -- Memento -- Null Object -- Observer -- State --

    C#设计模式_设计模式_C#_

    创建型: 1. 单件模式(Singleton ... 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)

    设计模式整理代码-pattern.zip

    - 责任链模式(Chain of Responsibility):避免将处理请求的对象硬编码,而是让请求沿着链传递,直到被某个对象处理。 - 命令模式(Command):将请求封装为一个对象,以便使用不同的请求、队列或者日志请求,也...

    C++设计模式(Design Pattern)范例源代码

    责任链模式(Chain of Responsibility) 命令模式(Command) 解释器模式(Interpreter) 迭代器模式(Iterator) 中介者模式(Mediator) 备忘录模式(Memento) 观察者模式(Observer) 状态模式(State) 策略模式(Strategy) 模板...

    Python 程序语言设计模式思路-行为型模式:职责链模式:将请求从一个处理者传递到下一个处理者

    职责链模式(Chain of Responsibility Pattern)是一种行为型设计模式,旨在将请求从一个处理者传递到下一个处理者,直到请求被处理或到达链的末端。职责链模式通过将请求的发送者和接收者解耦,使得多个对象都有...

Global site tag (gtag.js) - Google Analytics