zoukankan      html  css  js  c++  java
  • 23种设计模式

    一、责任链模式的介绍

            责任链模式用简单点的话来说,将责任一步一步传下去,这就是责任,想到这个我们可以相当击鼓传花,这个是为了方便记忆,另外就是我们在项目中经常用到的审批流程等这一类的场景时我们就可以考虑是否可以使用责任链模式。下面的介绍将会按照这个审批的例子写Demo;

    二、责任链模式的Demo

       //采购请求
        public class PurchaseRequest
        {
            //金额
            public double Amount { get; set; }
            //产品名字
            public string ProductName { get; set; }

            public PurchaseRequest(double amount,string productName)
            {
                Amount = amount;
                ProductName = productName;
            }
        }

       //审批人。
        public abstract class Approver
        {
            
            public Approver NextApprover { get; set; }

            public string Name { get; set; }

            public Approver(string name)
            {
                Name = name;
            }

            public abstract void ProcessRequest(PurchaseRequest purchaseRequset);

        }

     //管理者
        public class Manager : Approver
        {
            public Manager(string name) : base(name)
            {

            }

            public override void ProcessRequest(PurchaseRequest purchaseRequset)
            {
                if (purchaseRequset.Amount < 10000)
                {
                    Console.WriteLine("{0}-{1} approved the request of purshing {2}", this, Name, purchaseRequset.ProductName);
                }
                else if(NextApprover!=null)
                {
                    NextApprover.ProcessRequest(purchaseRequset);
                }
            }
        }

    //副总
        public class VicePresident : Approver
        {
            public VicePresident(string name) : base(name)
            {
            }

            public override void ProcessRequest(PurchaseRequest purchaseRequset)
            {
                if (purchaseRequset.Amount < 20000)
                {
                    Console.WriteLine("{0}-{1} approved the request of purshing {2}", this, Name, purchaseRequset.ProductName);
                }
                else if (NextApprover != null)
                {
                    NextApprover.ProcessRequest(purchaseRequset);
                }
            }
        }

    //总经理
        public class President : Approver
        {
            public President(string name) : base(name)
            {
            }

            public override void ProcessRequest(PurchaseRequest purchaseRequset)
            {
                if (purchaseRequset.Amount < 100000)
                {
                    Console.WriteLine("{0}-{1} approved the request of purshing {2}", this, Name, 
                        purchaseRequset.ProductName);
                }
                else
                {
                    Console.WriteLine("我们需要组织会议");
                }
            }
        }

    三、Demo位置

          GitHub:https://github.com/wangtongzhou520/Designpattern

         

        

      

  • 相关阅读:
    2008年DIY配台电脑
    Ubuntu替换清华源或者阿里源
    Flex里[Exclude]标签的作用:对外忽略/隐藏内部某对象
    UML中关联,依赖,聚集,组成的联系和区别
    在URLRequest中构造HTTP协议发送数据
    get flash object in different browser
    认识UML类图元素
    Intellisense – Making your components work with the Flash Builder IDE
    ACTIONSCRIPT 3.0著名开源库 大集合
    利用 StarUML 创建 AS3 代码
  • 原文地址:https://www.cnblogs.com/yujihaia/p/7468159.html
Copyright © 2011-2022 走看看