Java设计模式 之适配器模式

本文深入探讨了适配器模式的三种形式:类适配器模式、对象适配器模式和接口适配器模式,通过具体案例展示了如何解决接口不匹配的问题,使不同类能够协同工作。

适配器模式思想

适配器模式是一种结构型设计模式。
思想:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
适配就是由目标的适配,而当中链接两者的关系就是适配器,它负责把过度到目标

适配器模式包括3种形式:类适配器模式、对象适配器模式、接口适配器模式(或又称作缺省适配器模式)。

适配器模式涉及3个角色

用电器来打个比喻: 有一个电器的插头是三脚的,而现有的插座是两孔的,要使插头插上插座,我们需要一个插头转换器,这个转换器即是适配器。

  • 源(Adaptee):需要被适配的对象或类型,相当于插头。
  • 适配器(Adapter):连接目标和源的中间对象,适配器同时继承源和实现目标,相当于插头转换器。
  • 目标(Target):期待得到的目标,相当于插座。

类适配器模式

案例: 一个员工(源)会说日语和英语,而某个岗位(目标)需要你同时会说日语、英语、和法语,现在我们的任务就是要将这个员工适配到这个岗位中。最简单的办法是为员工添加一个说法语的方法,就满足目标的需要。
但是上面为了实现某种目的而为一个源类暂时性的加上某种方法,已经破坏原类的结构。同时不这么做也符合Java的高内聚,低耦合的原理。所以可以使用适配器模式。
在这里插入图片描述
员工(源):

public class Staff {
    public void speakJapanese(){
        System.out.println("我会说日语");
    }
    public void speakEnglish(){
        System.out.println("我会说英语");
    }
}

岗位(目标):

public interface Post {
    void speakJapanese();
    void speakEnglish();
    void speakFrench();
}

适配器,适配器同时继承源和实现目标:

public class Adapter extends Staff implements Post{
    @Override
    public void speakFrench() {
        System.out.println("我会说法语");
    }
}

客户端:

public class App {

    public static void main(String[] args) {
        Adapter adapter = new Adapter();
        adapter.speakJapanese();
        adapter.speakEnglish();
        adapter.speakFrench();
    }
}

运行结果。
在这里插入图片描述

对象适配器模式

对象适配器模式是把作为一个对象聚合到适配器类中,然后执行接口所要求的方法。 这种适配模式可以为多个源进行适配。弥补了类适配模式的不足。
在这里插入图片描述
修改适配器:

public class Adapter implements Post{

    private Staff staff;

    public Adapter(Staff staff){
        this.staff = staff;
    }

    @Override
    public void speakJapanese() {
        staff.speakJapanese();
    }

    @Override
    public void speakEnglish() {
        staff.speakEnglish();
    }

    @Override
    public void speakFrench() {
        System.out.println("我会说法语");
    }
}

接口适配器模式

也是默认适配器模式,这种模式的核心归结如下:当你想实现一个接口但又不想实现所有接口方法,只想去实现一部分方法时,就用中默认的适配器模式,他的方法是在接口和具体实现类中添加一个抽象类,而用抽象类去空实现目标接口的所有方法。而具体的实现类只需要覆盖其需要完成的方法即可。

抽象类去空实现目标接口的所有方法:

public abstract class AdapterAbstract implements Post {
    @Override
    public void speakJapanese() {

    }

    @Override
    public void speakEnglish() {

    }

    @Override
    public void speakFrench() {

    }
}

具体的适配器实现类:

public class AdapterImpl extends AdapterAbstract {

    @Override
    public void speakChinese() {
        System.out.println("I can speak Chinese!");
    }
}
胚胎实例分割数据集 一、基础信息 • 数据集名称:胚胎实例分割数据集 • 图片数量: 训练集:219张图片 验证集:49张图片 测试集:58张图片 总计:326张图片 • 训练集:219张图片 • 验证集:49张图片 • 测试集:58张图片 • 总计:326张图片 • 分类类别: 胚胎(embryo):表示生物胚胎结构,适用于发育生物学研究。 • 胚胎(embryo):表示生物胚胎结构,适用于发育生物学研究。 • 标注格式:YOLO格式,包含实例分割的多边形标注,适用于实例分割任务。 • 数据格式:图片来源于相关研究领域,格式为常见图像格式,细节清晰。 二、适用场景 • 胚胎发育AI分析系统:构建能够自动分割胚胎实例的AI模型,用于生物学研究中的形态变化追踪和量化分析。 • 医学与生物研究:在生殖医学、遗传学等领域,辅助研究人员进行胚胎结构识别、分割和发育阶段评估。 • 学术与创新研究:支持计算机视觉与生物医学的交叉学科研究,推动AI在胚胎学中的应用,助力高水平论文发表。 • 教育与实践培训:用于高校或研究机构的实验教学,帮助学生和从业者掌握实例分割技术及胚胎学知识。 三、数据集优势 • 精准与专业性:实例分割标注由领域专家完成,确保胚胎轮廓的精确性,提升模型训练的可靠性。 • 任务专用性:专注于胚胎实例分割,填补相关领域数据空白,适用于细粒度视觉分析。 • 格式兼容性:采用YOLO标注格式,易于集成到主流深度学习框架中,简化模型开发与部署流程。 • 科学价值突出:为胚胎发育研究、生命科学创新提供关键数据资源,促进AI在生物学中的实际应用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值