设计模式02:结构型设计模式之适配器模式使用情景及其基础Demo

server/2025/1/18 9:59:14/

1.适配器模式

  • 用途:接口兼容
  • 评价:复杂、冗余、难以调试,个人认为直接在旧系统那里封装一个新实现调用旧实现就好了
  • 场景:系统A、B、C想调用同一个功能接口,但是实现细节存在差异时(其实就是入参和出参转化处理,封装在一个新的类)
// 旧系统接口
public interface IOldSystem
{string GetData();
}// 旧系统实现
public class OldSystem : IOldSystem
{public string GetData(){return "Data from Old System";}
}// 新系统接口
public interface INewSystem
{string FetchData();
}// 新系统实现
public class NewSystem : INewSystem
{public string FetchData(){return "Data from New System";}
}// 适配器类,使 OldSystem 可以适配 NewSystem 的接口
public class SystemAdapter : IOldSystem
{private readonly INewSystem _newSystem;// 构造函数注入 NewSystempublic SystemAdapter(INewSystem newSystem){_newSystem = newSystem;}// 实现 IOldSystem 接口的方法,调用 NewSystem 的 FetchData 方法public string GetData(){//【重点】这里还能对入参、出参作细节处理,不仅仅是返回新的实现return _newSystem.FetchData();}
}class Program
{static void Main(string[] args){// 第一步:创建一个新系统的实例//INewSystem newSystem = new NewSystem();var newSystem = new NewSystem();// 第二步:使用适配器将新系统适配到旧系统接口 IOldSystem adaptedSystem = new SystemAdapter(newSystem);// 第三步:通过旧系统接口访问新系统的数据Console.WriteLine(adaptedSystem.GetData());}
}


http://www.ppmy.cn/server/159325.html

相关文章

Linux 历史指令快捷查询与指令

相比方向键上下翻找,history 命令可以显示之前执行过的命令列表,并且可以通过序号选择并重新执行某条命令。以下是具体的使用方法: 1. 查看历史命令 使用 history 命令查看之前执行过的命令列表: history示例输出: 1…

网络流量测量

网络测量的重要性:网络测量对于网络运营、拥塞控制、负载均衡和异常检测等至关重要。其中,大流检测是网络测量的关键任务之一,它记录流的大小和ID(通常由5元组或源/目的IP地址组成)。 基于Sketch的方法 牺牲精度换空…

计算机网络 (44)电子邮件

一、概述 电子邮件(Electronic Mail,简称E-mail)是因特网上最早流行的应用之一,并且至今仍然是因特网上最重要、最实用的应用之一。它利用计算机技术和互联网,实现了信息的快速、便捷传递。与传统的邮政系统相比&#…

LeetCode 2859. 计算 K 置位下标对应元素的和

在本篇文章中,我们将探讨如何求解 LeetCode 上的 2859. 计算 K 置位下标对应元素的和问题。这个问题要求我们找到一个数组中特定元素的和,这些特定元素的下标在二进制表示中恰好有 k 个置位。 问题描述 算法分析 为了解决这个问题,我们可以…

软件测试 —— 自动化测试(Selenium)

软件测试 —— 自动化测试(Selenium) 什么是SeleniumPython安装Selenium1.安装webdirver-manager2.安装Selenium 写一个简单用例CSS_SELECTOR和XPATH浏览器快速定位页面元素浏览器的前进(forward),后退(bac…

父组件数据更新后通过属性传递给子组件,子组件页面未更新问题记录

改老项目bug时&#xff0c;发现父组件数据更新后通过属性传递给子组件&#xff0c;子组件页面未更新&#xff1b;查看代码原来是使用shallowRef定义的属性导致的&#xff1b;这里记录一下 子组件如下 <template> <ul><li v-for"b in filterList" :k…

学成在线_内容管理模块_创建模块工程

学成在线模块工程 1.各个微服务依赖基础工程2.每个微服务都是一个前后端分离的项目3.xuecheng-plus-content&#xff1a;内容管理模块工程xuecheng-plus-content-modelxuecheng-plus-content-servicexuecheng-plus-content-api 1.各个微服务依赖基础工程 2.每个微服务都是一个前…

Openstack持久存储-Swift,Cinder,Manila三者之间的区别

总结不易&#xff0c;给个三连吧&#xff01;&#xff01;&#xff01; 补充&#xff1a; 文件共享存储服务Manila 在OpenStack生态系统中&#xff0c;Cinder和Manila分别提供了两种不同类型的存储服务&#xff0c;类似于传统的SAN&#xff08;存储区域网络&#xff09;和NAS&…