【每天一个java设计模式(六)】 - 适配器模式

news/2024/10/21 10:03:24/

当某种业务功能已经实现,但它们与当前系统的接口不兼容,如果重新开发成本又很高,这时用适配器模式能很好地解决这些问题。

适配器模式是作为两个不兼容的接口之间的桥梁,属于结构型模式,它结合了两个独立接口的功能。

将一个类的接口转换成需要的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。

适配器模式的实现:

假设有两款不同年代的电脑,一台功率100W,另一台功率200W。但是现在只有一个100W的充电器,我们要让它为200W的电脑充电,这时候我们就需要创建一个适配器来完成这个工作。

1. 创建一个充电接口

该提供一个按类型充电的方法。

//提供一个按类型充电的方法
public interface Charge {public void charge(String type);
}

2. 创建100W充电器接口

在这个接口中,提供一个方法可以为100W的电脑充电。

//100W充电器接口
public interface W100 {public void charge100W();
}

3. 创建100W充电接口的实现类

//100W充电的实现类
public class W100Impl implements W100 {@Overridepublic void charge100W() {System.out.println("使用100W充电器给电脑充电");}
}

4. 创建适配器

//适配器
public class ChargeAdapter implements Charge {W100 w100;public ChargeAdapter(String type){if(type.equals("100w")){w100 = new W100Impl();}}@Overridepublic void charge(String type) {w100.charge100W();}
}

5. 创建200W充电器实体

//适配器
//200w充电器
public class W200 implements Charge {ChargeAdapter chargeAdapter;@Overridepublic void charge(String type) {if(type.equals("200w")){System.out.println("200W充电器正常充电");}else if(type.equals("100w")) {chargeAdapter = new ChargeAdapter(type);chargeAdapter.charge(type);}else{System.out.println("功率不兼容,充电失败!!!");}}
}

6. 测试充电结果

public class AdapterMain {public static void main(String[] args) {W200 w200 = new W200();//通过适配器使用100w充电器给200w电脑充电System.out.print("过适配器使用100w充电器给200w电脑充电:");w200.charge("100w");//通过适配器使用300w充电器给200w电脑充电System.out.print("过适配器使用300w充电器给200w电脑充电:");w200.charge("300w");}
}

在这里插入图片描述
从打印结果中我们可以看到,当使用100w充电器给200w电脑充电时,充电成功了;而使用300W充电器时,提示我们功率不兼容,这是因为我们只提供了100W的适配器,没有300W的适配器。如果想让300W的充电器给200W的电脑充电,那么就只需要按照上述步骤再添加一个300W适配器即可。

到此,我们实现了适配器模式,成功通过使用适配器让200W电脑兼容100W充电器,即使原本由于接口不兼容而不能一起工作的那些类能一起工作。

前面几节的内容供大家参考:

  • 什么是设计模式:【每天一个java设计模式(零)】 - 设计模式基本概念及七大设计原则
  • 工厂模式:【每天一个java设计模式(一)】 - 工厂模式
  • 抽象工厂模式: 【每天一个java设计模式(二)】 - 抽象工厂模式
  • 单例模式:【每天一个java设计模式(三)】 - 单例模式
  • 原型模式:【每天一个java设计模式(四)】 - 原型模式
  • 建造者模式: 【每天一个java设计模式(五)】 - 建造者模式

下一节:
代理模式: 【每天一个java设计模式(七)】 - 代理模式模式


http://www.ppmy.cn/news/342647.html

相关文章

HTML期末大作业 ~ 马尔代夫旅游网页设计作业成品 ~ HTML+CSS+JS网页设计期末课程大作业 ~ web前端开发技术 ~ web课程设计网页规划与设计

HTML期末大作业 ~ 大学生旅游官网网页设计作业成品 ~ HTMLCSSJS网页设计期末课程大作业 ~ web前端开发技术 ~ web课程设计网页规划与设计~ 临近期末, 你还在为HTML网页设计结课作业,老师的作业要求感到头大?HTML网页作业无从下手?网页要求的总数量太多&…

深度学习入门:一句话告诉你什么是神经网络(CNN,RNN,DNN)

神经网络技术起源于上世纪五、六十年代,当时叫感知机(perceptron),拥有输入层、输出层和一个隐含层。输入的特征向量通过隐含层变换达到输出层,在输出层得到分类结果。早期感知机的推动者是Rosenblatt。(扯…

乐phone C101、W100、 W101、 S1 刷机一站式解决

注意: 1.本教程刷机过程需要在Windows操作系统环境下进行。 2.本教程只针对乐phone C101、W100、 W101、 S1。 3.请确认自己的机型下载对应的刷机文件。 4.刷机有风险,务必要小心;因刷机造成的任何问题,本人不承担任何责任。 5.因…

SA实战 ·《SpringCloud Alibaba实战》第10章-服务容错:项目整合Sentinel实现限流与容错

作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 大家好,我是冰河~~ 一不小心《SpringCloud Alibaba实战》专栏都更新到第10章了,再不上车就跟不上了,小伙伴们快跟上啊! 注意:本项目完…

手机通话录音删除了怎么恢复

手机是我们日常生活中必不可少的工具。我们常常使用手机进行通话,因此手机通话录音功能也变得越来越重要。但是有时,由于诸如误操作、系统故障或其他问题,手机中的通话录音可能会被误删。那么,如果发生这种情况,我们该…

Mysql服务器断电,数据库表打不开解决方案

现象:服务器突然断电,数据库重启后现场服务启动报错,提示某某表找不到 doesn’t exist,命令行链接数据库后,使用show databases查看数据库存在,进一步use后,show tables所有的表也存在&#xff…

成功解决c++ opencv中 error: ‘create’ is not a member of ‘cv::FeatureDetector {aka cv::Feature2D}’问题

使用opencv2的版本语法在Opencv3的版本,编译器会报错,更改源代码 [1]https://blog.csdn.net/bingoplus/article/details/60133565 [2]https://docs.opencv.org/3.2.0/db/d95/classcv_1_1ORB.html#adc371099dc902a9674bd98936e79739c