<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      結合項目實例 回顧傳統設計模式(六)命令模式

      2011-10-05 14:56  熬夜的蟲子  閱讀(581)  評論(0)    收藏  舉報

      命令模式將請求封裝成對象,以便使用不同的請求、隊列或者日志來參數化其他對象。命令模式也支持可撤銷的操作。用戶程序在使用的時候,只與該命令對象打交道,而不用與一類對象打交道,降低了耦合性,提高了程序設計的靈活性。

      我們還是那數據庫操作為例

        public class DBInstance
          {
              public void ExecuteNonQuery()
              {
              }

              public void ExecuteDataset()
              {
              }
             
          }
          public class SqlInstance : DBInstance
          {
              public void ExecuteNonQuery()
              {
                  Console.WriteLine("this is a SqlInstance");
              }
          }
          public class OracleInstance : DBInstance
          {
              public void ExecuteNonQuery()
              {
                  Console.WriteLine("this is a OracleInstance");
              }
          }
      public interface Command
          {
              void execute();
          }

          public class SqlCommand : Command
          {
              SqlInstance sqlinstance;
              public SqlCommand(SqlInstance sqlins)
              {
                  this.sqlinstance = sqlins;
              }
              public void execute()
              {
                  sqlinstance.ExecuteNonQuery();
              }
          }

          public class OracleCommand : Command
          {
              OracleInstance Oracleinstance;
              public OracleCommand(OracleInstance Oracleins)
              {
                  this.Oracleinstance = Oracleins;
              }
              public void execute()
              {
                  Oracleinstance.ExecuteNonQuery();
              }
          }

          public class DBControl
          {
              Command[] commands;
              public DBControl()
              {
                  commands = new Command[2];
              }
              public void setCommand(int index,Command comm)
              {
                  commands[index] = comm;
              }
              public void control(int index)
              {
                  commands[index].execute();
              }
          }

      測試下命令模式

       DBControl dc = new DBControl();
                  SqlInstance si = new SqlInstance();
                  SqlCommand sc = new SqlCommand(si);
                  OracleInstance oi = new OracleInstance();
                  OracleCommand oc = new OracleCommand(oi);

                  dc.setCommand(0, sc);
                  dc.setCommand(1, oc);

                  dc.control(0);
                  dc.control(1);

      總結:有的同學可能會問接收者有必要存在嗎?為何命令對象不知想實現execute()方法的細節。一般來說,我們設計命令對象,它或許只需要調用一個接收者的一個行為。然而有許多命令對象會實現許多邏輯,直接完成一個請求。當然你可以設計更全面的命令對象,只是這樣一來,調用者和接收者之間的解耦程度會再度降低。實際項目中命令可以將運算快打包(一個接收者一組動作),然后將他們傳來傳去,就像是普通對象一樣。所以在日程安排、線程池、事務隊列中命令模式的使用也是比較廣泛的,

      主站蜘蛛池模板: 人妻激情视频一区二区三区| 欧美亚洲另类自拍偷在线拍| 99久久伊人精品综合观看| 色综合久久中文综合久久激情 | 蜜臀av人妻国产精品建身房| 久久精品伊人狠狠大香网| 怀远县| 国内精品自产拍在线播放| 中文字幕av国产精品| 国产免费无遮挡吃奶视频| 久热这里只有精品视频六| 国产亚洲精品日韩香蕉网| 亚洲精品欧美综合二区| 免费视频国产在线观看| 好吊视频专区一区二区三区| 天天爽夜夜爱| 国产久免费热视频在线观看| 国产老熟女视频一区二区| 色伦专区97中文字幕| 亚洲精品自拍在线视频| 国产精品久久久久久妇女| 国产成人精品午夜在线观看| 亚洲中文久久久精品无码| 少妇xxxxx性开放| 国产最大成人亚洲精品| 性xxxxxx中国寡妇mm| 久久人妻精品国产| 亚洲色偷拍区另类无码专区 | 中国熟妇毛多多裸交视频| 又黄又硬又湿又刺激视频免费| 日韩av一区二区高清不卡 | 成人免费A级毛片无码网站入口| 人妻熟女一区无中文字幕| 小污女小欲女导航| 国产在线观看播放av| 伊人色综合久久天天| 亚洲国产成人久久一区久久| 久久av无码精品人妻出轨| 广州市| 亚洲一区二区中文字幕| 亚洲高清aⅴ日本欧美视频|