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

适配器模式

时间:2024-10-26 09:58:06浏览次数:3  
标签:turkey 适配器 接口 WildTurkey void 模式 Duck public

总结自:《Head First 设计模式》

适配器的作用是使原本两个不兼容的系统能够兼容起来,比如电源转接口就是一种适配器:

img

假设有一个 Duck(鸭子)接口,其中有 quack(呱呱叫)和 fly 方法:

public interface Duck {
    void quack();
    void fly();
}

现在如果你还没实现好 Duck 接口,想先用 WildTurkey(火鸡)冒充一下,WildTurkey 中有 gobble(咯咯叫)和 fly 方法:

public class WildTurkey {
    public void gobble() {
        System.out.println("Gobble gobble");
    }

    public void fly() {
        System.out.println("I'm flying a short distance");
    }
}

但是 WildTurkey 没有实现 Duck 接口,这时候就可以写一个适配器来实现 Duck 接口,然后在实现接口中的方法时,将其委托给被适配的对象,也就是 WildTurkey 对象:

public class TurkeyAdapter implements Duck {
    private WildTurkey turkey;

    public TurkeyAdapter(WildTurkey turkey) {
        this.turkey = turkey;
    }

    public void quack() {
        turkey.gobble();
    }

    public void fly() {
        for (int i = 0; i < 5; i++) {
            turkey.fly();
        }
    }
}

使用时,将 WildTurkey 传给 TurkeyAdapter,Client 调用 TurkeyAdapter 中的 Duck 方法实现,实际调用的是 WildTurkey 中的方法,这样也就实现了 TurkeyAdapter 和 Duck 的兼容:

public class DuckTestDrive {
    public static void main(String[] args) {
        WildTurkey turkey = new WildTurkey();
        Duck turkeyAdapter = new TurkeyAdapter(turkey);

        testDuck(turkeyAdapter);
    }

    static void testDuck(Duck duck) {
        duck.quack();
        duck.fly();
    }
}

1、定义:适配器模式将一个类的接口,转换成客户期望的另一个接口,让原本接口不兼容的类可以合作无间。

2、角色:

  • Target:客户所期望的接口
  • Adaptee:需要被适配的类
  • Adapter:将 Adaptee 的接口转换成 Target 的接口

在示例中:

  • 客户所期望的接口 Target:Duck
  • 需要被适配的类 Adaptee:WildTurkey
  • 适配器 Adapter:TurkeyAdapter

标签:turkey,适配器,接口,WildTurkey,void,模式,Duck,public
From: https://www.cnblogs.com/Higurashi-kagome/p/17488741.html

相关文章

  • 微服务设计模式-边车模式(Sidecar Pattern)
    微服务设计模式-边车模式(SidecarPattern)定义边车模式(SidecarPattern)是一种将应用程序的功能分离到一个独立的进程或容器中的设计模式。这个独立的进程或容器被称为边车(Sidecar),它与主应用程序(MainApplication)一起运行,并为其提供额外的功能和服务。边车模式可以看作是一......
  • 从门面模式到 SLF4J 及其 getLogger 方法原理
    基于以下内容总结:从门面模式到Slf4j、10分钟讲清楚JavaSLF4J,Java日志框架的扛把子,从原理到实践写后端接口的时候,先写一个Service接口,这个Service接口的实现中可能会调用多个其他Service或Mapper方法来实现某个业务,对于Controller,只需要传递参数给Service方法就......
  • 使用 NLP 和模式匹配检测、评估和编辑日志中的个人身份信息 - 第 2 部分
    作者:来自Elastic StephenBrown如何使用Elasticsearch、NLP和模式匹配检测、评估和编辑日志中的PII。简介:分布式系统中高熵日志的普遍存在大大增加了PII(PersonallyIdentifiableInformation-个人身份信息)渗入我们日志的风险,这可能导致安全和合规性问题。这篇由两......
  • 研发模式IPD的总结
    1.研发模式介绍:2.角色和指责3.需求分析4.开发串讲对应输出:5.测试策略制定(前置条件:有清晰的需求文档、设计文档和开发文档)对应输出:......
  • 实验3:工厂方法模式
    [实验任务一]:加密算法目前常用的加密算法有DES(DataEncryptionStandard)和IDEA(InternationalDataEncryptionAlgorithm)国际数据加密算法等,请用工厂方法实现加密算法系统。实验要求:1.画出对应的类图;2.提交该系统的代码,该系统务必是一个可以能够直接使用的系统,查阅资料完成相......
  • 部署 KRaft 模式下的 Kafka
    环境介绍kafka1:192.168.174.100kafka2:192.168.174.101kafka3:192.168.174.102下载kafka#wgethttps://dlcdn.apache.org/kafka/3.8.0/kafka_2.13-3.8.0.tgz解压kafka#tarxfkafka_2.13-3.8.0.tgz-C/usr/local#ln-sv/usr/local/kafka_2.13-3.8.0/usr/local......
  • 在K8S中,kube-proxy 三种工作模式和原理是什么?
    在Kubernetes(K8s)中,kube-proxy是负责实现Service的网络代理和负载均衡功能的组件。它支持三种不同的工作模式,每种模式的工作原理和特点各不相同。以下是kube-proxy的三种工作模式和原理的详细解释:1.Userspace模式工作原理:kube-proxy监听KubernetesAPI服务器中Service和Endpo......
  • autMan框架适配器的编写教程
    首先要确定接入社交媒体的类型,例如:QQ类型为qq,QQ频道类型为qb,微信类型为wx,tg客户端类型为tg,tg官方机器人类型为tb,这里确定的社交媒体类型不要与内置类型冲突,尽量使用2个字母代指。以下以tt类型为例。一、HTTP方式连接时的适配器插件编写即:社交媒体可以设置消息回调地址......
  • PHP中的单例模式实现
    文章开始:在PHP中,单例模式是一种创建型设计模式,目的在于限制某个类只能生产一个实例,同时提供一个全局访问点。应用这种模式,可以确保类在程序中只存在一个实例,不同的类在访问时调用的是相同的实例,从而节约系统资源、提高效率。要在PHP中实现单例模式,主要步骤包括创建单例类、构造......
  • 基于对称点模式(symmetric dot pattern)的多元数据融合-matlab代码
        引言受最近深度学习在计算机视觉和语音识别方面的成功启发,许多研究者提出将一维时间序列数据编码为不同类型的图像,这样可以放大数据中的动态特性,更好地表征原数据。基于对称点模式(symmetricdotpattern)的多元数据融合对称点模式(SymmetrizedDotPattern,SDP)算法可......