<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        .NET適配器模式講解

        來源:懂視網 責編:小采 時間:2020-11-27 22:36:20
        文檔

        .NET適配器模式講解

        .NET適配器模式講解:適配器模式簡介: 將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。 在計算機編程中,適配器模式(有時候也稱包裝樣式或者包裝)將一個類的接口適配成用戶所期待的。一個適配允許通常因
        推薦度:
        導讀.NET適配器模式講解:適配器模式簡介: 將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。 在計算機編程中,適配器模式(有時候也稱包裝樣式或者包裝)將一個類的接口適配成用戶所期待的。一個適配允許通常因

        適配器模式簡介:

        將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。

        在計算機編程中,適配器模式(有時候也稱包裝樣式或者包裝)將一個類的接口適配成用戶所期待的。一個適配允許通常因為接口不兼容而不能在一起工作的類工作在一起,做法是將類自己的接口包裹在一個已存在的類中。

        適配器模式結構圖:

        引入實例進行說明:

        以日志記錄程序為Demo說明,在任何一套軟件中都會有對應的日志管理模塊,假如如果我們在開發軟件中的日記記錄采用第三方的日志組件進行日志記錄,它采用的是Log.Write("寫日志");的方式我們的程序在開發中,大量實例化日記記錄對象,采用的Log.Write()方式進行日志記錄,但是現在第三方的日志組件現在不免費了,需要收費了,于是我們打算使用一種新的日志管理模塊,只不過它提供給我們的API接口是采用Log.WriteLog("新的寫日志的方式");進行日志記錄。這個時候問題就出現了,如何應對這種遷移的變化

        類適配器模式

        1.原來日志的接口,采用的是Write(“寫日志”);方法

         /// <summary>
         /// 原來的日志記錄接口
         /// </summary>
         public interface ILogTarget
         {
         /// <summary>
         /// 原來的寫日志方法
         /// </summary>
         void Write(string info);
         }
        
        
        

        2.然而現在的寫日志的接口,采用的是WriteLog("寫日志");里面實現了寫日志的新的方式:將日志寫到文件中,數據庫中

         /// <summary>
         /// 抽象寫日志類
         /// </summary>
         public abstract class LogAdaptee
         {
         /// <summary>
         /// 寫日志
         /// </summary>
         public abstract void WriteLog(string info);
         }
        
        
        
         /// <summary>
         /// 寫文件日志記錄
         /// </summary>
         public class FileLog:LogAdaptee
         {
         /// <summary>
         /// 寫日志到文件中
         /// </summary>
         public override void WriteLog(string info)
         {
         Console.WriteLine("記錄到文本文件:"+info);
         }
         }
        
        
        
         /// <summary>
         /// 往數據庫中寫日志
         /// </summary>
         public class DatabaseLog:LogAdaptee
         {
         /// <summary>
         /// 重寫寫日志方法
         /// </summary>
         public override void WriteLog(string info)
         {
         Console.WriteLine("記錄到數據庫:"+info);
         }
         }
        

        3.如何使用者兩個新對象中的方式,替換原來的寫日志的方式?

         /// <summary>
         /// 采用新的寫日志的方式,寫入到數據庫中
         /// </summary>
         public class DatabaseLogAdapter:DatabaseLog,ILogTarget
         {
         /// <summary>
         /// 在重寫ILogTarget接口中的的Write方法里面調用新的寫日志的方式WriteLog
         /// </summary>
         public void Write(string info)
         {
         WriteLog(info);
         }
         }
        
         /// <summary>
         /// 采用新的寫日志的方式,寫入到文本文件
         /// </summary>
         public class FileLogAdapter : FileLog, ILogTarget
         {
         /// <summary>
         /// 在重寫ILogTarget接口中的的Write方法里面調用新的寫日志的方式WriteLog
         /// </summary>
         public void Write(string info)
         {
         this.WriteLog(info);
         }
         }
        

        4.調用依據使用的原來寫日志的方法,但是確實使用的新的寫日志的方式:

         /// <summary>
         /// 類 適配器模式(Adapter Pattern)
         /// </summary>
         class Program
         {
         static void Main(string[] args)
         {
         ILogTarget dbLog = new DatabaseLogAdapter();
         dbLog.Write("程序啟動成功");
         dbLog = new FileLogAdapter();
         dbLog.Write("程序啟動成功");
         }
         }
        
        
        

        對象適配器模式

        1.方式采用的是類適配器的方式實現了新的日志功能的遷移變化,下面我們使用對象適配器,可以區別發現兩種方式的特別之處。原來寫日志的方法依舊不變:Write("寫日志");

         /// <summary>
         /// 原來的日志記錄接口
         /// </summary>
         public interface ILogTarget
         {
         /// <summary>
         /// 原來的寫日志方法
         /// </summary>
         void Write(string info);
         }

        2.現在的寫日志的接口,采用的是WriteLog("寫日志");里面實現了寫日志的新的方式:將日志寫到文件中,數據庫中:

         /// <summary>
         /// 抽象寫日志類
         /// </summary>
         public abstract class LogAdaptee
         {
         /// <summary>
         /// 寫日志
         /// </summary>
         public abstract void WriteLog(string info);
         }
        
        
         /// <summary>
         /// 寫文件日志記錄
         /// </summary>
         public class FileLog:LogAdaptee
         {
         /// <summary>
         /// 寫日志到文件中
         /// </summary>
         public override void WriteLog(string info)
         {
         Console.WriteLine("記錄到文本文件:"+info);
         }
         }
        
        
        
         /// <summary>
         /// 往數據庫中寫日志
         /// </summary>
         public class DatabaseLog:LogAdaptee
         {
         /// <summary>
         /// 重寫寫日志方法
         /// </summary>
         public override void WriteLog(string info)
         {
         Console.WriteLine("記錄到數據庫:"+info);
         }
         }
        
        
        

        3.上面我們添加了FileLogAdapter 類,DatabaseLogAdapter類,繼承了FileLog,DatabaseLog, ILogTarget接口,重寫Write方法里面調用新的寫日志的方式WriteLog,使用這樣的方式進行了遷移變化。下面使用對象適配:

         /// <summary>
         /// 對象適配,繼承ILogTarget,里面有LogAdaptee抽象日志類對象。
         /// </summary>
         public class LogAdapter:ILogTarget
         {
         /// <summary>
         /// 抽象寫日志類
         /// </summary>
         private LogAdaptee _adaptee;
        
         public LogAdapter(LogAdaptee adaptee)
         {
         this._adaptee = adaptee;
         }
        
         public void Write(string info)
         {
         _adaptee.WriteLog(info);
         }
         }
        
        
        

        4.在程序中的調用:

         /// <summary>
         /// 對象適配器模式(Adapter Pattern)
         /// </summary>
         class Program
         {
         static void Main(string[] args)
         {
         ILogTarget dbLog = new LogAdapter(new DatabaseLog());
         dbLog.Write("程序啟動成功");
         ILogTarget fileLog = new LogAdapter(new FileLog());
         fileLog.Write("程序啟動成功");
         }
         }

        比較兩者的遷移變化,在類適配方式中,我們得到的適配器類DatabaseLogAdapter和FileLogAdapter具有它所繼承的父類的所有的行為,同時也具有接口ILogTarget的所有行為,這樣其實是違背了面向對象設計原則中的類的單一職責原則,而對象適配器則更符合面向對象的精神,所以在實際應用中不太推薦類適配這種方式。假設我們要適配出來的類在記錄日志時同時寫入文件和數據庫,那么用對象適配器我們會這樣去寫:

         /// <summary>
         /// 對象適配,繼承ILogTarget,里面有LogAdaptee抽象日志類對象。
         /// </summary>
         public class LogAdapter:ILogTarget
         {
         /// <summary>
         /// 抽象寫日志類
         /// </summary>
         private LogAdaptee _adapteed;
        
         /// <summary>
         /// 抽象寫日志類
         /// </summary>
         private LogAdaptee _adapteef;
        
         public LogAdapter(LogAdaptee adapteed, LogAdaptee adapteef)
         {
         this._adapteed = adapteed;
         this._adapteef = adapteef;
         }
        
         public void Write(string info)
         {
         _adapteed.WriteLog(info);
         _adapteef.WriteLog(info);
         }
         }
        
        
        

        調用:

         /// <summary>
         /// 對象適配器模式(Adapter Pattern)
         /// </summary>
         class Program
         {
         static void Main(string[] args)
         {
         //同時寫日志到文件和數據庫
         ILogTarget dbLog = new LogAdapter(new FileLog(), new DatabaseLog());
         dbLog.Write("程序啟動成功");
         }
         }

        如果改用類適配器:我們難道使用這樣的寫法達到目的?

         public class DatabaseLogAdapter : DatabaseLog, FileLog, ILogTarget
         {
         public void Write(string info)
         {
         this.WriteLog(info);
         }
         }
        

        結果肯定是不能的,一個類不能具有多個基類,這樣寫明細有錯誤。所有針對不同的情況,我們應該采用合適的方式去進行適配調度。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        .NET適配器模式講解

        .NET適配器模式講解:適配器模式簡介: 將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。 在計算機編程中,適配器模式(有時候也稱包裝樣式或者包裝)將一個類的接口適配成用戶所期待的。一個適配允許通常因
        推薦度:
        標簽: 模式 講解 詳解
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 国产资源免费观看| 在线a人片天堂免费观看高清| 亚洲国产精品成人网址天堂| 亚洲精品欧美综合四区| 好吊妞788免费视频播放| 亚洲高清一区二区三区| 亚洲精品蜜桃久久久久久| 亚洲a∨无码男人的天堂| 91精品全国免费观看含羞草| 亚洲毛片免费观看| AV免费网址在线观看| 亚洲国产成人精品无码区二本| 国产成人一区二区三区免费视频 | 免费在线观看污网站| 午夜不卡AV免费| 亚洲夜夜欢A∨一区二区三区 | 亚洲精品成a人在线观看| 人妻巨大乳hd免费看| 亚洲av永久无码精品漫画| 1000部免费啪啪十八未年禁止观看| 亚洲一区二区三区在线网站| 天天看免费高清影视| 一个人看的www免费在线视频| 成年美女黄网站色大免费视频| 亚洲国产精品一区| 一个人晚上在线观看的免费视频| 亚洲国产无套无码av电影| 91香蕉国产线观看免费全集| 亚洲熟妇丰满xxxxx| 亚洲国产成人影院播放| 男人j进入女人j内部免费网站| 亚洲色无码一区二区三区| 美丽姑娘免费观看在线观看中文版 | 福利片免费一区二区三区| 中文字幕不卡亚洲 | 男女啪啪免费体验区| 亚洲自偷自拍另类12p| 久久久久久久岛国免费播放| 亚洲AV无码精品蜜桃| 亚洲精品成人网久久久久久| 最近最新高清免费中文字幕|