放大器(或集線器)模式(Hub)


  集線器的英文稱為“Hub”。“Hub”是“中心”的意思,集線器的主要功能是對接收到的信號進行再生整形放大,以擴大網絡的傳輸距離,同時把所有節點集中在以它為中心的節點上。也就是說是“一個變多個”,如USB HUB,從USB接入后分多個USB接出。對此有一個比較容易理解的應用,那就是日志輸出。

  首先定義一個日志輸出接口:

    

  再實現三個類:輸出到日志文件類、輸出到控制台類、輸出到數據庫類。

    

然后就可以日志輸出了。如:

      ILog file = new FileLog();

      file.Output("這個信息輸出到日志文件。");

或:

      ILog console = new ConsoleLog();

      console.Output("這個信息輸出到控制台。");
或:

      ILog database = new DatabaseLog();

      database.Output("這個信息輸出到數據庫。");

如果此時,日志需要即輸出到控制台,又需要記錄到日志文件。那就得用Hub模式了。

跟節點(這里的節點就是輸出到日志文件類、輸出到控制台類、輸出到數據庫類等實現了ILog的類)一樣實現ILog接口,同時又包含多個節點(輸出)。 結構圖為:

      

代碼結構圖為:

      

      

INode代碼:

    public interface INode
    {
        void DoSomething();
    }

Hub代碼:

    public class Hub : INode
    {
        private List<INode> _nodes = new List<INode>();

        public Hub(params INode[] nodes)
        {
            _nodes.AddRange(nodes);
        }

        public void DoSomething()
        {
            foreach (var item in _nodes)
            {
                item.DoSomething();
            }
        }
    }

此時,我們已經可以寫出Log的Hub類了,實現代碼如下:

    public class LogHub : ILog  // 實現跟節點一樣的接口ILog
    {
        private List<ILog> _logs = new List<ILog>();  //包含多個輸出節點

        public LogHub(params ILog[] logs)
        {
            _logs.AddRange(logs);
        }

        public void Output(string log)
        {
       // 逐個輸出 foreach (var item in _logs) { item.Output(log); } } }

輕松實現多方式輸出,如實現“即輸出到控制台,還需要記錄到日志文件”如下:

      ILog loger = new LogHub(new ConsoleLog(), new FileLog());

      loger.Output("這個信息即輸出到控制台,還需要記錄到日志文件。");


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM