国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答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毛片无毒不卡 | 国产欧美曰韩一区二区三区 | 亚洲一区 中文字幕 久久 | 国产精品免费看 | 香蕉乱码成人久久天堂爱免费 | 美国一级大黄大色毛片视频一 | 欧美一区三区 | 午夜视频免费观看 | 欧美亚洲欧美 | 久久99一区| 亚洲第一网站在线观看 | 亚洲国产成人久久综合一区 | 精品久久久久中文字幕日本 | 欧美日韩国产另类一区二区三区 | 麻豆91视频 | 国产色综合久久无码有码 | 欧美日韩国产码高清综合人成 | 久久久高清国产999尤物 | 日韩一区二区久久久久久 | 国产全部视频在线播放 | 伊人精品视频在线观看 | 国产精品第十页 | 国内一级野外a一级毛片 | 久久精品一区二区 | 亚洲国产精品婷婷久久久久 | 国产精品一区二区av | 日韩在线观看视频网站 | 亚洲欧美国产日本 | 欧美日韩精品一区二区三区视频在线 | 久久国产精品成人免费古装 | 国内精品久久久久久久久 | 免费一级毛片 | 午夜日本一区二区三区 | 91一区二区三区四区五区 | 日韩在线免费视频观看 | 国产a视频| 久久国产精品成人免费古装 | 国产精欧美一区二区三区 | 亚洲欧美日韩高清中文在线 | 国产日韩欧美亚洲综合 | 日本伊人久久 |