http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 6704|回复: 5

[学习心得] C#行为模式列子

[复制链接]
发表于 2019-1-10 10:12:20 | 显示全部楼层 |阅读模式
一 、  责任链模式的实际应用案例

下面的责任链模式代码演示了不同职务的人根据所设定的权限对一个购买请求作出决策或将其交给更高的决策者。


3.png


[C#] 纯文本查看 复制代码
using System;
// "Handler"
abstract class Approver
{
    // Fields
    protected string name;
    protected Approver successor;
    // Constructors
    protected Approver(string name)
    {
        this.name = name;
    }
    // Methods
    public void SetSuccessor(Approver successor)
    {
        this.successor = successor;
    }
    public abstract void ProcessRequest(PurchaseRequest request);
}
// "ConcreteHandler"
class Director : Approver
{
    // Constructors
    public Director(string name) : base(name) { }
    // Methods
    public override void ProcessRequest(PurchaseRequest request)
    {
        if (request.Amount < 10000.0)
            Console.WriteLine("{0} {1} approved request# {2}",
            this, name, request.Number);
        else
            if (successor != null)
                successor.ProcessRequest(request);
    }
}
// "ConcreteHandler"
class VicePresident : Approver
{
    // Constructors
    public VicePresident(string name) : base(name) { }
    // Methods
    public override void ProcessRequest(PurchaseRequest request)
    {
        if (request.Amount < 25000.0)
            Console.WriteLine("{0} {1} approved request# {2}",
            this, name, request.Number);
        else
            if (successor != null)
                successor.ProcessRequest(request);
    }
}
// "ConcreteHandler"
class President : Approver
{
    // Constructors
    public President(string name) : base(name) { }
    // Methods
    public override void ProcessRequest(PurchaseRequest request)
    {
        if (request.Amount < 100000.0)
            Console.WriteLine("{0} {1} approved request# {2}",
            this, name, request.Number);
        else
            Console.WriteLine("Request# {0} requires " +
            "an executive meeting!", request.Number);
    }
}
// Request details
class PurchaseRequest
{
    // Member Fields
    // Constructors
    public PurchaseRequest(int number,
    double amount, string purpose)
    {
        Number = number;
        Amount = amount;
        Purpose = purpose;
    }
    // Properties
    public double Amount { get; set; }

    public string Purpose { get; set; }

    public int Number { get; set; }
}
/// <summary>
/// ChainApp Application
/// </summary>
public class ChainApp
{
    public static void Main(string[] args)
    {
        // Setup Chain of Responsibility
        Director Larry = new Director("Larry");
        VicePresident Sam = new VicePresident("Sam");
        President Tammy = new President("Tammy");
        Larry.SetSuccessor(Sam);
        Sam.SetSuccessor(Tammy);
        // Generate and process different requests
        PurchaseRequest rs = new PurchaseRequest(2034, 350.00, "Supplies");
        Larry.ProcessRequest(rs);
        PurchaseRequest rx = new PurchaseRequest(2035, 32590.10, "Project X");
        Larry.ProcessRequest(rx);
        PurchaseRequest ry = new PurchaseRequest(2036, 122100.00, "Project Y");
        Larry.ProcessRequest(ry);
    }
}


二 、  责任链模式的实现

    责任链模式并不创建责任链。责任链的创建必须由系统的其它部分创建出来。

    责任链模式降低了请求的发送端和接收端之间的耦合,使多个对象都有机会处理这个请求。一个链可以是一条线,
一个树,也可以是一个环。如下图所示,责任链是一个树结构的一部分。

2.png




1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2019-1-10 11:00:44 | 显示全部楼层
强烈支持楼主ing……
发表于 2019-1-10 14:03:55 | 显示全部楼层
我只是路过打酱油的。
发表于 2019-1-10 14:20:17 | 显示全部楼层
强烈支持楼主ing……
发表于 2019-1-10 14:32:58 | 显示全部楼层
我只是路过打酱油的。
发表于 2019-1-10 16:46:50 | 显示全部楼层
我只是路过打酱油的。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-5-4 19:16

© 2014-2021

快速回复 返回顶部 返回列表