機房合作之職責鏈模式

來源:互聯網
上載者:User

    經過好玩又有趣的軟考備戰和考試之後,終究還是要歸於平靜的.我們要學得東西還有很多,於是在軟考結束的第二天,機房合作就馬上提上了議事議程.在剛開始的時候,是一邊做著新聞發布系統,一邊思考合作的事宜,到了後來,逐步的過渡全身心投入機房合作的項目中去的階段,因為我是項目組長,必須要做很多的工作,從一開始的建模到文檔編寫,再到敲代碼,都要涉及,今天我們來討論討論如何在機房收費系統的費用計算上使用職責鏈模式.

    首先我們要給出解決方案的類圖

        

    職責鏈模式無非就是把所有的處理對象,通過SetSuccessor()函數連結起來,形成一個處理鏈,當我們將一個問題請求出入時,該請求會沿著職責鏈進行傳遞,知道被處理為止.這就是職責鏈模式的工作流程.

    下面我給出機房收費系統關於下機時給出的消費時間,如何計算應收費用的邏輯圖


    針對此設計給出一個使用C#編寫的簡單demo如下:  

<span style="font-size:18px;">using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Test{    class Program    {        static void Main(string[] args)        {            ConcreteHandler1  handler1= new ConcreteHandler1 ("處理對象1");            ConcreteHandler2  handler2= new ConcreteHandler2 ("處理對象2");            ConcreteHandler3  handler3= new ConcreteHandler3 ("處理對象3");            handler1.SetSuperior(handler2);            handler2.SetSuperior(handler3);            Request request = new Request();            request.ConsumeTime = 4;            handler1.RequestApplications(request);            Request request1 = new Request();            request1.ConsumeTime = 20;            handler1.RequestApplications(request1);            Request request2 = new Request();            request2.ConsumeTime = 50;            handler1.RequestApplications(request2);            Console.Read();        }    }    //待處理的對象,即上網時間    class Request    {        //客戶消費時間        private int consumetime;        public int ConsumeTime        {            get { return consumetime; }            set { consumetime = value; }        }        //客戶消費金額        private double    consumecash;        public double    ConsumeCash        {            get { return consumecash; }            set { consumecash = value ; }        }    }    //處理者抽象類別    abstract class Handler    {        protected string name;        protected Handler superior;        public Handler(string name)        {            this.name = name;        }        public void SetSuperior(Handler superior)        {            this.superior = superior;        }        abstract public void RequestApplications(Request request);    }    //處理類1    class ConcreteHandler1:Handler    {        public ConcreteHandler1(string name)            : base(name)        { }        public override void RequestApplications(Request request)        {            if (request .ConsumeTime <=5 )            {                request.ConsumeCash  = 0.0;                Console.WriteLine("該客戶的消費金額為{0}元,業務員:{1}",  request .ConsumeCash ,name );            }            else            {                if (superior != null)                    superior.RequestApplications(request);            }        }    }    //處理類2    class ConcreteHandler2:Handler    {        public ConcreteHandler2(string name)            : base(name)        { }        public override void RequestApplications(Request request)        {            if (request .ConsumeTime >5 &&request .ConsumeTime <=30 )            {                request.ConsumeCash = 3.0 * (30.0 / 60.0);                Console.WriteLine("該客戶的消費金額為{0}元,業務員:{1}",request .ConsumeCash,name   );            }            else            {                if (superior != null)                    superior.RequestApplications(request);            }        }    }    //處理類3    class ConcreteHandler3:Handler    {        public ConcreteHandler3(string name)            : base(name)        { }        public override void RequestApplications(Request request)        {            if (request.ConsumeTime >30 )            {                request.ConsumeCash = 3.0 * ((double )request .ConsumeTime  / 60.0);                 Console.WriteLine("該客戶的消費金額為{0}元,業務員:{1}", request .ConsumeCash,name  );            }        }    }}</span>

    運行結果如下

    

    有的人可能覺得職責鏈模式用在此處顯得有些多此一舉,這樣想不無道理,我們在機房收費系統盡量加入設計模式,目的是學習並且對設計模式進行實踐,並不是要給出問題的完美解決方案,因此用的合不合適也就無所謂了,重要的是這學習的過程.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.