设计模式----责任链

使用情况描述:某人向银行借钱 借1W一下一般柜员就可以解决,借2W一下一般经理就能解决,如果借更多就需要主管才能解决。

这就是一个责任链,根据条件的不同,分别进行复杂的逻辑运算。

if,switch都可以进行这样的操作,但是需要在每一层进行一次复杂的操作。责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。

责任链模式的优点

实现了请求者与处理者代码分离:发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。提高系统的灵活性和可扩展行。

缺点:

每次都是从链头开始:这也正是链表的缺点。你也许会想到一种貌似不错的解决方案,比如使用hash映射,将要处理的请求id与处理类对象关联,但是这样系统损失了可扩展性。

 
public class Loan
    {
        public string Name { get; set; }

        public decimal LoanMoney { get; set; }

        public Loan(string name,decimal loanDecimal)
        {
            Name = name;
            LoanMoney = loanDecimal;
        }
    }<pre class="csharp" name="code"> 

 

 

public class employe
    {
        public  employe next { get; set; }
        public virtual void LoanMoneyToSome(Loan loan)
        {
            if (loan.LoanMoney < 10000)
            {
                Console.WriteLine("employee loan the money!");
            }
            else if (next != null)
            {
                next.LoanMoneyToSome(loan);
            }
            else
            {
                Console.WriteLine("no order");
            }
        }

    }


 

public class DeputyManager: employe
    {

        public override void LoanMoneyToSome(Loan loan)
        {
            if (loan.LoanMoney < 20000)
            {
                Console.WriteLine(string.Format("DeputyManager loan {0} money {1}",loan.Name,loan.LoanMoney
            ));     
            }
            else if (next != null)
            {
                next.LoanMoneyToSome(loan);
            }
            else
            {
                Console.WriteLine("no power");
            }
        }
    }


 

    public class manger: employe
    {
        public override void LoanMoneyToSome(Loan loan)
        {
            Console.WriteLine(" manger loan the money");
        }
    }

 

class Program
    {
        static void Main(string[] args)
        {
            Loan l1=new Loan("Jack",9999);
            Loan l2 = new Loan("tom", 19999);
            Loan l3 = new Loan("lucky", 29999);

            employe e = new employe();

            e.next=new DeputyManager();

            e.next.next=new manger();

            e.LoanMoneyToSome(l1);
            e.LoanMoneyToSome(l2);
            e.LoanMoneyToSome(l3);

            Console.ReadKey();
        }
    }



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值