宝哥软件园

解释 网络适配器模式

编辑:宝哥软件园 来源:互联网 时间:2021-09-11

适配器模式简介:

将一个类的接口转换成客户需要的另一个接口。适配器模式使由于接口不兼容而无法协同工作的类能够协同工作。

在计算机编程中,适配器模式(有时称为包装器样式或包装器)使类的接口适应用户的期望。通过将它们自己的接口封装在一个现有的类中,一种适应允许通常由于不兼容的接口而不能一起工作的类一起工作。

适配器模式结构图:

介绍一些例子来说明:

以日志程序为Demo,任何一套软件中都会有相应的日志管理模块。如果我们使用第三方日志组件来登录开发软件,它会使用日志。Write('写日志');在我们程序的开发中,大量的日志对象被实例化,日志是以日志的方式进行的。Write(),但是现在第三方日志组件不可避免地要收费,所以我们计划使用一个新的日志管理模块,只是它提供给我们的API接口使用log。WriteLog('写日志的新方式');记录日志。这时,问题就出现了。如何应对这种迁移变化

类适配器模式

1.原始日志界面使用Write(“写日志”);方法

///summary ///原始日志记录接口////summary公共接口ilog target {///summary///原始日志记录方法////summary void write(string info);}2.但是,当前用于写入日志的接口使用写日志(“写日志”);它实现了一种写入日志的新方法:将日志写入文件和数据库

///summary ///抽象日志编写类////summary public抽象类日志adaptee {///summary///write log////summary public抽象void write log(string info);}///summary///write file log record////summary public class filelog : log adaptee {///summary////将日志写入文件////summary public override void write log(string info){ console。writeline('记录到文本文件:' info ');} }///Summary////将日志写入数据库////summary public class数据库log:日志adaptee {///Summary////重写日志写入方法////Summary public override void write log(string info){ console . write line('记录到数据库:' info ');} }3.如何用两个新对象中的方式来代替原来写日志的方式?

///summary ///以一种新的日志记录方式将其写入数据库。////摘要公共类databaselog适配器: databaselog。ILogTarget {///summary////在ilog目标接口中重写Write方法时调用了一种新的写日志方式。////summary public void write(string info){ write log(info);}} ///summary ///采用新的写日志方式,写入文本文件////summary公共类filelog适配器: filelog。ILogTarget {///summary////在ilog目标接口中重写Write方法时调用了一种新的写日志方式。////summary public void write(字符串信息){this。写日志(信息);} }4.按照原来使用的方法调用写日志的新方法,但它确实被使用了:

///summary////类适配器模式////summary类程序{ static void main(string[]args){ ilog target dblog=new databaselogadapter();DbLog。Write('程序成功启动');dbLog=new file logadapter();DbLog。Write('程序成功启动');}}对象适配器模式

1.该模式采用类适配器实现新日志功能的迁移和更改。接下来,我们使用对象适配器来找到这两种模式的特殊功能。原来写日志的方法不变:写('写日志');

///summary ///原始日志记录接口////summary公共接口ilog target {///summary///原始日志记录方法////summary void write(string info);}2.当前用于写入日志的接口使用写日志(“写日志”);它实现了一种写入日志的新方法:将日志写入文件,并在数据库中:

///summary ///抽象日志编写类////summary public抽象类日志adaptee {///summary///write log////summary public抽象void write log(string info);}///summary///write file log record////summary public class filelog : log adaptee {///summary////将日志写入文件////summary public override void write log(string info){ console。writeline('记录到文本文件:' info ');} }///Summary////将日志写入数据库////summary public class数据库log:日志adaptee {///Summary////重写日志写入方法////Summary public override void write log(string info){ console . write line('记录到数据库:' info ');} }3.上面我们增加了FileLogAdapter类、DatabaseLogAdapter类,继承了FileLog、DatabaseLog、ILogTarget接口,在Write方法中重写了写日志的新方式,并以此方式进行了迁移更改。下面使用对象适配:

///summary ///对象适配,继承ILogTarget,其中包含LogAdaptee抽象日志类对象。////summary公共类日志适配器: ilog target {///summary////抽象日志写入类////summary私有日志适配器_ adaptor公共LogAdapter(LogAdaptee adaptee){ this。_ adaptee=adaptee} public void Write(字符串信息){ _adaptee。WriteLog(信息);} }4.在程序中调用:

///summary////对象适配器模式////summary类程序{ static void main(string[]args){ ilog target dblog=new log适配器(new database log());DbLog。Write('程序成功启动');ILogTarget fileLog=new LogAdapter(new fileLog());文件日志。Write('程序成功启动');}}比较它们之间的迁移变化。在类适配模式下,适配器类DatabaseLogAdapter和FileLogAdapter拥有其继承的父类的所有行为,也拥有接口ILogTarget的所有行为,这实际上违背了面向对象设计原则中类单一责任的原则,而对象适配器更符合面向对象的精神,因此在实际应用中不建议进行类适配。假设我们想要调整的类在记录时同时被写入文件和数据库,我们将使用对象适配器这样写:

///summary ///对象适配,继承ILogTarget,其中包含LogAdaptee抽象日志类对象。////summary公共类日志适配器: ilog target {///summary////抽象日志写入类////summary私有日志适配器_ adapted///summary ///抽象日志类////summary私有日志adaptee _ adapteefpublic LogAdapter(LogAdaptee adapteed,LogAdaptee adapteef) { this。_ adapteed=adapteed这个。_ adapteef=adapteef} public void Write(字符串信息){ _ adapteed。WriteLog(信息);_ adapteef。WriteLog(信息);}}通话:

///summary///object adapter pattern////summary class program { static void main(string[]args){//log to file and database ilog target dblog=new log adapter(new file log(),new database log());DbLog。Write('程序成功启动');}}如果改用类适配器:我们用这种写法来达到目的吗?

公共类数据库日志适配器:数据库日志,文件日志,ILogTarget { public void Write(字符串信息){ this。WriteLog(信息);}}结果肯定是否定的,一个类不能有多个基类,所以写细节有错误。针对不同的情况,我们应该采用合适的方法进行自适应调度。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

更多资讯
游戏推荐
更多+