首页 > 其他分享 >设计模式之适配器模式

设计模式之适配器模式

时间:2024-09-24 10:25:40浏览次数:8  
标签:Adapter Target 适配 适配器 接口 模式 设计模式 Adaptee

适配器模式

适配器模式(Adapter Pattern)是一种结构型设计模式,它允许不兼容的接口之间进行交互。在软件工程中,适配器用于解决两个已有接口之间不匹配的问题,使得原本因接口不兼容而不能一起工作的类可以协同工作。

基本概念

  • 目标接口(Target):客户期望使用的接口,它定义了客户需要的方法。
  • 被适配者(Adaptee):已存在的接口或类,它需要被适配。
  • 适配器(Adapter):适配器实现或继承目标接口,并内部持有一个被适配者的实例。适配器负责调用被适配者的方法,并将其输出适配到目标接口中。

类型

适配器模式分为两种类型:

  1. 类适配器模式:通过多重继承对一个接口与另一个接口进行匹配。此方法通过继承被适配者和实现目标接口来实现适配。
  2. 对象适配器模式:通过组合来连接被适配者与目标接口。适配器持有被适配者的实例,并实现目标接口。

应用场景

适配器模式常用于以下场景:

  • 当你希望使用某个类,但其接口与其他代码不兼容时,可以使用适配器类。
  • 当需要使用几个现有的子类,但不可能对每一个都进行子类化以匹配它们的接口时,对象适配器可以适配它们的父类接口。

优点

  • 增强了类的透明性和复用性:独立地改变客户端与被适配者,使得两者之间的适配不必修改源代码,只需添加适配器即可重用现有的功能。
  • 灵活性和扩展性:通过使用配置文件,可以在不修改原有代码的情况下引入新的适配器,提高系统的灵活性和可扩展性。

缺点

  • 过多的使用适配器会让系统非常凌乱:特别是当看到多个适配器被同时使用时,对于系统的维护和理解都是一个挑战。
  • 系统的整体复杂性可能增加:引入新的接口和适配器类,系统的复杂性可能增加。

代码实践

在Go语言中实现适配器模式通常采用对象适配器模式,因为Go不支持类和继承,但支持接口。下面是一个使用Go语言实现的对象适配器模式的示例:

定义目标接口和被适配者

首先,我们定义一个目标接口Target,这是客户所期望的接口,包含一个Request()方法。然后,我们定义一个被适配者Adaptee类,它有一个不兼容的接口SpecificRequest()

package main

import "fmt"

// Target 是目标接口
type Target interface {
	Request() string
}

// Adaptee 是被适配者类
type Adaptee struct{}

// SpecificRequest 是Adaptee的一个方法,它与Target接口不兼容
func (a *Adaptee) SpecificRequest() string {
	return "Specific request."
}

实现适配器

接下来,我们创建一个适配器Adapter,它实现了Target接口,并内部持有一个Adaptee的实例。适配器AdapterRequest()方法内部调用AdapteeSpecificRequest()方法,从而将Adaptee的接口适配到Target接口。

// Adapter 是适配器
type Adapter struct {
	adaptee *Adaptee
}

// NewAdapter 是Adapter的构造函数
func NewAdapter(adaptee *Adaptee) *Adapter {
	return &Adapter{adaptee: adaptee}
}

// Request 实现了Target接口
func (a *Adapter) Request() string {
	return a.adaptee.SpecificRequest()
}

客户端代码

最后,我们编写客户端代码,使用Adapter来调用Target接口的方法,从而通过适配器使用Adaptee的功能。

func main() {
	adaptee := &Adaptee{}
	adapter := NewAdapter(adaptee)
	result := adapter.Request()
	fmt.Println(result)  // 输出: Specific request.
}

这个例子展示了如何在Go中使用对象适配器模式,通过一个适配器来解决接口不兼容的问题,使得原本不兼容的接口能够在客户端代码中被透明地使用。

总结

适配器模式是一种实用的结构型设计模式,它可以帮助我们将一个类的接口转换成客户期望的另一个接口,解决因接口不兼容而导致的类无法正常工作的问题。在实际应用中,适配器模式可以有效地帮助我们解决现有系统中的不兼容问题,提高系统的灵活性和可维护性。

标签:Adapter,Target,适配,适配器,接口,模式,设计模式,Adaptee
From: https://www.cnblogs.com/zhifwu/p/18428547

相关文章

  • SW1125 集成氮化镓的高频准谐振模式反激变换
    SW1125是一款集成650VGaN的针对离线式反激变换器的高性能高集成度准谐振电流模式PWM变换器。芯片集成有700V高压启动电路、线电压掉电检测和X电容放电功能。SW1125工作于带谷底锁定功能的谷底开启模式,同时集成频率抖动功能以优化EMI性能;当负载降低时,芯片从P......
  • SY5072BABT 单相过渡模式PFC控制器
    SY5072B为恒压过渡模式带功率因数校正(PFC)的升压控制器函数。常开时间控制应用于实现高PF和低THD,无需乘法器。它以准谐振模式驱动升压变换器高效率和更好的电磁干扰性能。它采用特殊设计,实现快速启动、快速运行可靠的安全保护要求。•谷开通,实现低开关损耗轻载时......
  • MySQL主从复制中启用GTID(全局事务标识符)模式
    在MySQL中启用GTID(全局事务标识符)模式进行主从复制涉及几个步骤。GTID为每个事务赋予一个唯一的标识符,从而简化了复制过程和故障恢复。以下是启用GTID模式的基本步骤:首先确保两台数据库目前数据保持一致1.准备工作确保您使用的MySQL版本支持GTID。GTID从MySQL5.6版本开始支持......
  • 策略模式
    1.先做一个不那么恰当的例子//1.先做一个DuckclasspublicabstractclassSimUDuck{voidquack(){Console.WriteLine("鸭子都会嘎嘎叫");}voidswim(){Console.WriteLine("鸭子都会游泳");......
  • c#代码介绍23种设计模式_07适配器模式
    目录1、适配器模式2、类的适配器模式实现(ClassAdapterPattern.cs)3、对象的适配器模式实现(ObjectAdapterPattern.cs)4、适配器模式的优缺点4-1.类的适配器模式:4-2.对象的适配器模式5、使用场景6、.NET中适配器模式的实现7、实现思路1、适配器模式在实际的开发......
  • AIGC从入门到实战:AIGC 在教育行业的创新场景—苏格拉底式的问答模式和AIGC 可视化创新
    AIGC从入门到实战:AIGC在教育行业的创新场景—苏格拉底式的问答模式和AIGC可视化创新作者:禅与计算机程序设计艺术/ZenandtheArtofComputerProgramming1.背景介绍1.1问题的由来随着人工智能技术的飞速发展,人工智能生成内容(AIGC,ArtificialIntelligenceGenera......
  • Spark(六)运行模式(二)
    Yarn模式1、解压缩文件[user@hadoop102software]$tar-zxvfspark-3.0.0-bin-hadoop3.2.tgz-C/opt/module[user@hadoop102software]$cd/opt/module[user@hadoop102module]$mvspark-3.0.0-bin-hadoop3.2spark-yarn2、修改配置文件(1)修改hadoop配置文件/opt/module......
  • 代理模式 - 动态代理
    动态代理的APIProxy动态代理类生成代理对象:Proxy.newProxyInstance(类加载器,接口数组,处理器)类加载器:对象.getClass().getClassLoader()接口数组-被代理类的所有接口:被代理对象.getClass().getInterfaces()处理器:代理对象调用方法时,会被处理器拦截InvocationHa......
  • 云设计模式介绍
    云设计模式介绍以及它们如何帮助应对分布式计算的谬误   作为构建分布式系统的软件工程师,我们经常遇到诸如不可靠的网络、延迟问题和安全问题等挑战。"分布式计算的谬误"描述了如果未解决,可能导致系统故障的常见误解。但认识到这些陷阱只是开始。真正的问题是:我们如何有效地克......
  • 基于django+vue基于O2O模式的外卖订餐系统【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,电子商务已渗透到人们生活的方方面面,其中外卖订餐系统作为“互联网+餐饮”的典型代表,近年来在全球范围内迅速崛......