• 设计模式职责链模式


    /// <summary>
        
    /// 交易信息
        
    /// </summary>
        public sealed class DealInfo
        {
            /// <summary>
            
    /// 金额
            
    /// </summary>
            public double Money {get;set;}

        }

        /// <summary>
        
    /// 管理者基类
        
    /// </summary>
        public abstract class ManagerBase
        {
            /// <summary>
            
    /// 处理外部请求,
            
    /// 注意:子类是internal的,这意味着
            
    /// 外界看不到具体子类,只能看到这个基类,
            
    /// 只由这个基类来与外界交互
            
    /// </summary>
            
    /// <param name="d"></param>
            public static void BeginHandle(DealInfo d)
            {
                new TeamLeader().Handle(d);
            }

            public abstract void Handle(DealInfo d);
        }

        /// <summary>
        
    /// 项目Leader
        
    /// </summary>
        internal class TeamLeader : ManagerBase
        {
            public override void Handle(DealInfo d)
            {
                if (d.Money < 1000)
                {
                    Console.WriteLine(this.GetType() + " Handle.");
                    return;
                }
                new DeptDirector().Handle(d);
            }
        }

        /// <summary>
        
    /// 部门主管
        
    /// </summary>
        internal class DeptDirector : ManagerBase
        {

            public override void Handle(DealInfo d)
            {
                if (d.Money>=1000 && d.Money<10000)
                {
                    Console.WriteLine(this.GetType() + " Handle.");
                    return;
                }
                new GeneralManager().Handle(d);
            }
        }

        /// <summary>
        
    /// 总经理
        
    /// </summary>
        internal class GeneralManager : ManagerBase
        {

            public override void Handle(DealInfo d)
            {
                if (d.Money>=10000 && d.Money <100000)
                {
                    Console.WriteLine(this.GetType() + " Handle.");
                    return;
                }
                new Chairman().Handle(d);
            }
        }

        /// <summary>
        
    /// 总裁
        
    /// </summary>
        internal class Chairman : ManagerBase
        {
            public override void Handle(DealInfo d)
            {
                if (d.Money>=100000)
                {
                    Console.WriteLine(this.GetType() + " Handle.");
                }
            }
        }



    public static void ChainPattern()
            {
                //一,职责链模式主要目的:
                
    //1,隔离请求者和具体处理者,请求着不用关心具体是谁最终处理了请求,
                
    //只管发送请求信息即可,请求的处理细节由处理者来处理即可。
                
    //二,职责链模式应用:1,OA中的审批流程  2,log4net中的Filter功能
                
    //三,本示例即OA的审批流程
                ManagerBase.BeginHandle(new DealInfo() {  Money=50000});
            }
  • 相关阅读:
    使用Apworks开发基于CQRS架构的应用程序(六):创建.NET WCF服务
    Microsoft NLayerApp案例理论与实践 项目简介与环境搭建
    使用Apworks开发基于CQRS架构的应用程序(七):配置数据库
    测试一下亚马逊联盟
    Revit参数族之DMD系列静电水处理器
    Revit参数族之ZP系列消声器
    第一个Ruby程序:Hello world!
    百度文库下载器冰点下载
    sketchup ruby编程之绘制梯段
    加西亚马尔克斯枯枝败叶
  • 原文地址:https://www.cnblogs.com/imap/p/2619436.html
Copyright © 2020-2023  润新知