乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)

(32)C#设计模式——适配器模式(Adapter Pattern) 引言 在实际的开发过程中,由于应用环境的变化,我们需要的实现在新环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象。如何在新环境中调用“现存的对象”呢?采用适配器模式可以解决。适配器模式使得新环境中不需要去重复实现已经存在了的实现,而很好的把现有的对象(指原来环境中的现有对象)加入到新环境中来使用。 详细介绍 定义:把一个类的接口变换成客户端所期待的另一种接口,从而使得原本接口不匹... 阅读详情
[索引页]
[源码下载]


乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)


作者: webabcd


介绍
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。


示例
有一个Message实体类,某个类对它的操作有Insert()和Get()方法。现在需要把这个类转到另一个接口,分别对应Add()和Select()方法。



MessageModel
using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  Pattern.Adapter
{
    
/// <summary>
    
/// Message实体类
    
/// </summary>

    public class MessageModel
    
{
        
/// <summary>
        
/// 构造函数
        
/// </summary>
        
/// <param name="msg">Message内容</param>
        
/// <param name="pt">Message发布时间</param>

        public MessageModel(string msg, DateTime pt)
        
{
            
this._message = msg;
            
this._publishTime = pt;
        }


        
private string _message;
        
/// <summary>
        
/// Message内容
        
/// </summary>

        public string Message
        
{
            
get { return _message; }
            
set { _message = value; }
        }


        
private DateTime _publishTime;
        
/// <summary>
        
/// Message发布时间
        
/// </summary>

        public DateTime PublishTime
        
{
            
get { return _publishTime; }
            
set { _publishTime = value; }
        }

    }

}


SqlMessage
using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  Pattern.Adapter
{
    
/// <summary>
    
/// 源(Adaptee)角色
    
/// Sql方式操作Message
    
/// </summary>

    public class SqlMessage
    
{
        
/// <summary>
        
/// 获取Message
        
/// </summary>
        
/// <returns></returns>

        public List<MessageModel> Get()
        
{
            List
<MessageModel> l = new List<MessageModel>();
            l.Add(
new MessageModel("SQL方式获取Message", DateTime.Now));

            
return l;
        }


        
/// <summary>
        
/// 插入Message
        
/// </summary>
        
/// <param name="mm">Message实体对象</param>
        
/// <returns></returns>

        public bool Insert(MessageModel mm)
        
{
            
// 代码略
            return true;
        }

    }

}


IMessage
using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  Pattern.Adapter
{
    
/// <summary>
    
/// 目标(Target)角色
    
/// 操作Message的接口
    
/// </summary>

    public interface IMessage
    
{
        
/// <summary>
        
/// 获取Message
        
/// </summary>
        
/// <returns></returns>

        List<MessageModel> Select();

        
/// <summary>
        
/// 插入Message
        
/// </summary>
        
/// <param name="mm">Message实体对象</param>
        
/// <returns></returns>

        bool Add(MessageModel mm);
    }

}


Message
using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  Pattern.Adapter
{
    
/// <summary>
    
/// 适配器(Adapter)角色
    
/// 类适配器
    
/// 把源适配到这个类
    
/// </summary>

    public class Message : SqlMessage, IMessage
    
{
        
/// <summary>
        
/// 获取Message
        
/// </summary>
        
/// <returns></returns>

        public List<MessageModel> Select()
        
{
            
return base.Get();
        }


        
/// <summary>
        
/// 插入Message
        
/// </summary>
        
/// <param name="mm">Message实体对象</param>
        
/// <returns></returns>

        public bool Add(MessageModel mm)
        
{
            
return base.Insert(mm);
        }

    }

}


Message2
using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  Pattern.Adapter
{
    
/// <summary>
    
/// 适配器(Adapter)角色
    
/// 对象适配器
    
/// 把源适配到这个类
    
/// </summary>

    public class Message2 : IMessage
    
{
        
private SqlMessage _sqlMessage;

        
/// <summary>
        
/// 构造函数
        
/// </summary>

        public Message2()
        
{
            _sqlMessage 
= new SqlMessage();
        }


        
/// <summary>
        
/// 获取Message
        
/// </summary>
        
/// <returns></returns>

        public List<MessageModel> Select()
        
{
            
return _sqlMessage.Get();
        }


        
/// <summary>
        
/// 插入Message
        
/// </summary>
        
/// <param name="mm">Message实体对象</param>
        
/// <returns></returns>

        public bool Add(MessageModel mm)
        
{
            
return _sqlMessage.Insert(mm);
        }

    }

}



client
using  System;
using  System.Data;
using  System.Configuration;
using  System.Collections;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;

using  Pattern.Adapter;

public  partial  class  Adapter : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    
{
        IMessage m;

        m 
= new Message();
        Response.Write(
"类适配器方式<br />");
        Response.Write(m.Add(
new MessageModel("插入", DateTime.Now)));
        Response.Write(
"<br />");
        Response.Write(m.Select()[
0].Message + " " + m.Select()[0].PublishTime.ToString());
        Response.Write(
"<br /><br />");

        m 
= new Message2();
        Response.Write(
"对象适配器方式<br />");
        Response.Write(m.Add(
new MessageModel("插入", DateTime.Now)));
        Response.Write(
"<br />");
        Response.Write(m.Select()[
0].Message + " " + m.Select()[0].PublishTime.ToString());
        Response.Write(
"<br />");
    }

}


运行结果
类适配器方式
True
SQL方式获取Message 2007-4-8 20:59:29

对象适配器方式
True
SQL方式获取Message 2007-4-8 20:59:29


参考
http://www.dofactory.com/Patterns/PatternAdapter.aspx


OK
[源码下载]
STM32F4用FSMC驱动AX58100 EtherCAT从站芯片,保姆级配置流程与避坑指南 本文详细介绍了STM32F4通过FSMC接口驱动AX58100 EtherCAT从站芯片的完整配置流程,包括硬件连接、时序优化、协议栈移植及TwinCAT主站集成。针对工业自动化场景,提供高性价比的实时控制解决方案,特别适合机械臂、CNC机床等精确同步应用,并分享关键调试技巧与性能优化方法。 阅读详情

相关推荐

OPNET卫星节点仿真避坑指南:为什么你的STK轨道文件导入后位置不对?

本文深入解析OPNET卫星节点仿真中STK轨道文件导入后位置异常的常见问题,揭示坐标系差异(ECI与ECF)、时间基准不匹配等关键因素。通过修改.SA文件头标识、统一时间基准等解决方案,帮助工程师避免仿真失真,提升卫星通信系统仿真的准确性。特别适用于STK与OPNET协同工作的卫星网络仿真场景。

weixin_30335575的博客 600

【C#设计模式】6.适配器模式(Adapter Pattern)【结构型】

1.1 动机(Motivate) 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口? 1.2 意图(Intent) 将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 --《设计模式》Gof .........

星Yeah 的博客 3311

实战篇【2】-H3C防火墙开局基础配置

本篇文章为“H3C防火墙开局基础配置”,主要涵盖配置管理地址、聚合端口、安全区域、安全策略、静态路由、ACL,WEB和SSH远程管理、Console、SNMP、NTP时钟、日志主机等内容,对比交换机配置开局,增加两处配置,安全区域和安全策略。方便调试人员远程管理、调试。

weixin_47402139的博客 1万+

C#设计模式--适配器模式(Adapter Pattern)

适配器模式是一种非常实用的设计模式,特别适用于需要将不同接口的类集成在一起的场景。通过适配器模式,可以有效地解决接口不兼容的问题,提高代码的复用性和灵活性。然而,使用适配器模式也会增加系统的复杂性和维护成本,因此在实际开发中需要权衡利弊,合理使用。

仰望星空的人 2965

ArcGIS属性表汉字转拼音

接着我安装了一个编辑器“PyCharm Community Edition 2019.3.3\bin\pycharm64.exe”,在里面添加“pypinyin”包,然后将其设置为arcgis的编辑器和调试程序,还是失败;我在10.6的机器上折腾了上面几步,直到两周后脚本突然运行成功,我也不确定是哪一步导致pypinyin包配置成功,因此将心得体会写出来,如果过一段时间,打开10.2的机器运行脚本成功了,再写后续.......,按照“配置方法1:”进行尝试,显示配置失败。

2301_77413856的博客 1295

保姆级教程:用CameraX API快速搞定Android多摄像头切换与预览(附避坑指南)

本文提供了一份详细的CameraX API教程,帮助开发者快速实现Android多摄像头切换与预览功能。通过简化API设计和生命周期感知能力,CameraX大幅降低了开发复杂度,同时解决了多摄像头兼容性、预览优化等常见问题。文章包含完整代码示例和实战避坑指南,特别适合需要高效集成相机功能的Android开发者。

weixin_42699679的博客 166

设计模式- 适配器模式 (Adapter Pattern)

定义 适配器模式是通过一个类的接口转换成客户希望的另外一个接口,使原本由于接口不兼容而不能一起工作的那些类可以一起工作。 适配器从结构上可以分为类适配器和对象适配器。其中类适配器使用继承关系来对类进行适配,而对象适配器是使用对象引用的方法来进行适配的。 C#例子 public interface ITarget { void Request(); } ...

易兒善 604

安装matlab_Matlab+yalmip+cplex安装教程及算例

数学建模/科研学习推荐学习软件:Matlab+yalmip+cplex安装教程及算例其实绝大多数本科生都是在用Matlab和LINGO求解优化问题,Matlab可以求解一般优化问题,但是当优化问题规模比较大或者在应对一些非线性问题时候,Matlab会出现求解时间长,求解效率低,甚至难以求解等问题。Matlab+yalmip+cplex是Matlab通过调用商业软件cplex求解,求解时间短,这里简...

weixin_28939637的博客 5005

适配器模式(Adapter Pattern)

适配器模式是一种结构型设计模式,用于解决接口不兼容问题。其核心思想是通过创建中间层(适配器),将现有接口转换为客户端期望的接口。模式包含四个角色:目标接口(客户端期望的接口)、被适配者(需要转换的现有接口)、适配器(执行转换的中间层)和客户端使用者。代码示例展示了JSON与XML数据格式转换的实现,通过适配器将JSON接口适配到XML解析器上。C#和C++实现的主要区别在于接口定义方式和内存管理机制。适配器模式提高了代码复用性,使不兼容的类能够协同工作。

紫枫伊的博客 795

OnePlus线刷救砖与OTA全量包:从故障恢复到系统升级的完整指南

本文详细介绍了OnePlus手机线刷救砖与OTA全量包的完整操作指南,包括故障诊断、线刷救砖实战教程、OTA全量包升级优势及进阶玩法。通过具体案例和实用技巧,帮助用户从系统故障恢复到安全升级,特别适合Android系统爱好者和OnePlus用户。

weixin_30338481的博客 616

人群仿真软件:AnyLogic_(12).AnyLogic高级功能应用

在AnyLogic中,自定义行人行为是通过编写Java代码来实现的。行人行为的自定义可以包括行走路径的选择、速度变化、交互行为等。这使得仿真模型更加灵活和真实。

kkchenjj的博客 1060

设计模式6:Adapter Pattern (适配器模式)

来自于:http://www.cnblogs.com/zhenyulu/articles/39386.html参考于:http://www.dofactory.com/Patterns/PatternAdapter.aspx一、 适配器(Adapter)模式适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。名称由来

薛敬明的专栏 2751

087、DAMO-YOLO Efficient-RepGFPN:重参数化加皇后融合加黄金分割的创新 Neck

DAMO-YOLO的Efficient-RepGFPN创新性Neck结构摘要: 该结构通过三重创新提升目标检测性能: 重参数化卷积:训练时多分支(3x3卷积+1x1卷积+BN分支)提升特征表达能力,推理时合并为单路3x3卷积保证效率; 皇后融合机制:采用可学习权重对不同尺度特征进行自适应加权融合,而非简单相加,通过Softmax归一化权重实现特征选择; 黄金分割连接:优化特征金字塔层间连接方式,按比例分配相邻层特征权重(如P3:P5≈0.618:0.382),减少冗余连接噪声。 实验表明,该结构有效解决了传

ai技术增长的博客 102

C# 设计模式:适配器模式(Adapter Pattern)

摘要适配器模式是一种结构型设计模式,它允许不兼容的接口之间能够相互合作。这种模式涉及到一个单独的类,它负责加入独立的或不兼容的接口功能。简单来说,适配器模式就是一个中间件,它使得原本由于接口不兼容而不能一起工作的类可以一起工作。正文应用场景适配器模式通常应用于以下情况:当你希望使用某个类,但是它的接口与其他代码不兼容时。当...

cnzzs的博客 966

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

设计模式——适配器模式(Adapter Pattern)

根据类适配器模式结构图,适配器类实现了抽象目标类接口Target,并继承了适配者类,在适配器类的request()方法中调用所继承的适配者类的specificRequest()方法,实现了适配。● Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,包含了客户希望使用的业务方法,在某些情况下可能没有适配者类的源代码。如果需要使用其他排序算法类和查找算法类,可以增加一个新的适配器类,使用新的适配器来适配新的算法,原有代码无须修改。

ddm 1572

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

适配器模式(Adapter Pattern) — Python实现

适配器模式(Adapter Pattern) — Python实现 模式动机 在软件开发中采用类似于电源适配器的设计和编码技巧被称为适配器模式。 通常情况下,客户端可以通过目标类的接口访问它所提供的服务。有时,现有的类可以满足客户类的功能需要,但是它所提供的接口不一定是客户类所期望的,这可能是因为现有类中方法名与目标类中定义的方法名不一致等原因所导致的。 在这种情况下,现有的接口需要转化为客户类期望的接口,这样保证了对现有类的重用。如果不进行这样的转化,客户类就不能利用现有类所提供的功能,适配器模式可以完

qq_33511971的博客 512

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【图解设计模式系列】The Adapter Pattern: 适配器模式

适配器模式是将一个类的接口转换成客户希望的另一个接口,从而让那些接口不兼容的类可以一起工作。 converts the interface of a class into another interface the clients expect. Adapter lets classes works together that couldn’t otherwise because of incompatible interfaces. 适配器模式包含一下三个角色: Target(目标抽象类):目标抽象

Tech in Pieces 611

C# 设计模式:第六章 - 结构型模式 之 适配器模式(Adapter Pattern)

在这章中,我们学习了适配器模式的基本概念、应用场景、实现方法以及注意事项。适配器模式提供了一种将一个类的接口转换成客户端期望的另一个接口的方式,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。我们通过两个实际的代码示例展示了如何在 C# 中实现适配器模式,包括基本适配器模式和支付网关适配器。最后,我们还讨论了一些使用适配器模式时需要注意的地方,帮助你在实际开发中做出明智的选择。

caifox的博客 1028

C#设计模式(7)——适配器模式(Adapter Pattern)

C#设计模式(7)——适配器模式(Adapter Pattern) 一、引言 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象。那么如果将“将现存的对象”在新的环境中进行调用呢?解决这个问题的办法就是我们本文要介绍的适配器模式——使得新环境中不需要去重复...

fgmah2000的博客 150

C#设计模式(10)-Adapter Pattern

结构模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构。结构模式描述两种不同的东西:类与类的实例。根据这一点,结构模式可以分为类的结构模式和对象的结构模式。 后续内容将包括以下结构模式: 适配器模式(Adapter):Match interfaces of different classes 合成模式(Composite):...

atg0518的博客 138

适配器模式(Adapter Pattern)——C#设计模式七

原文地址:http://www.cnblogs.com/zhili/p/AdapterPattern.html 原文作者:Learning hard 一、引言 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象。那么如果将“将现存的对象”在新的环境中进行调用呢?解决这个问题的办法就是我们本文要介绍的适配器模...

U3D开发 205

C# 适配者模式 Adapter Pattern

适配者模式 Adapter Pattern,常见的设计模式之一。 目标接口 ITarget 与 类Adaptee 本来没有任何关系。但是可以使用一个新的子类Adaptee来继承和实现这两个类。相当于将逻辑合并,使不同的类型一起合作。常见的就是一个类,继承于父类,并实现一个或多个接口。比如类SqlCommand就是适配者模式的实现。【 System.Data.SqlClient.SqlComman...

ylq1045的专栏 182
上一篇: [翻译]在asp.net 2.0中使用WebParts
下一篇: [翻译]使用asp.net 2.0中的SqlBulkCopy类批量复制数据
webabcd
博客等级 码龄17年 28粉丝 911原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值