软件设计之适配器模式

news2024/11/28 16:42:07

类模式

我们知道插座的电压为交流电220V,而日常电器使用的是直流电且电压会较小,比如手机充电会通过插头适配器达到额定的输入电流。下面我们实现这个案例:将220V电压转化为5V的电压。

 

package Adapter.Class;

public class Adapter extends Power220V implements Power5V {
    @Override
    public int output5V() {
        int input = output220V();
        int output = input/44;
        return output;
    }
}
package Adapter.Class;

public class Client {
    public static void main(String[] args) {
        Phone phone = new HuaWei();
        phone.charging(new Adapter());
    }
}
package Adapter.Class;

public class HuaWei implements Phone{
    @Override
    public void charging(Adapter adapter) {
        System.out.println("华为手机适配电压5伏");
        if(adapter.output5V()==5) System.out.println("华为手机充电成功");
        else System.out.println("华为手机充电不成功");
    }
}
package Adapter.Class;

public interface Phone {
    public void charging(Adapter adapter);
}
package Adapter.Class;

public interface Power5V {
    public int output5V();
}
package Adapter.Class;

public class Power220V {
    private int power = 220;
    public int output220V() {
        System.out.println("电压" + power + "伏");
        return power;
    }
}

这种模式被称作类模式,可以看到Adapter继承了Adaptee(要适配者)并且实现了Target(要适配者)。对于一对一的适配还有一种模式叫对象模式,在这种模式下,Adaptee会作为Adapter的成员属性而不是让Adapter去继承Adaptee。

对象模式 

 

package Adapter.Object;

public class Adapter implements Power5V {
    Power220V power220V;

    public Adapter() {

    }

    public Adapter(Power220V power220V) {
        this.power220V = power220V;
    }

    @Override
    public int output5V() {
        int input = power220V.output220V();
        int output = input/44;
        return output;
    }
}
package Adapter.Object;

public class Client {
    public static void main(String[] args) {
        Phone phone = new HuaWei();
        phone.charging(new Adapter(new Power220V()));
    }
}

 

双向模式

上面的案例介绍了一对一的适配,还有一种适配是双向的。下面用一个案例介绍:实现猫学狗叫和狗学猫抓老鼠。

package Adapter.BothWay;

public class Adapter implements CatImpl,DogImpl{
    private CatImpl cat;
    private DogImpl dog;

    public CatImpl getCat() {
        return cat;
    }

    public void setCat(CatImpl cat) {
        this.cat = cat;
    }

    public DogImpl getDog() {
        return dog;
    }

    public void setDog(DogImpl dog) {
        this.dog = dog;
    }

    @Override
    public void catchMice() {
        System.out.print("狗学");
        cat.catchMice();
    }

    @Override
    public void cry() {
        System.out.print("猫学");
        dog.cry();
    }
}
package Adapter.BothWay;

public class Cat implements CatImpl{
    @Override
    public void catchMice() {
        System.out.println("猫抓老鼠");
    }

    @Override
    public void cry() {

    }
}
package Adapter.BothWay;

public interface CatImpl {
    public void catchMice();
    public void cry();
}
package Adapter.BothWay;

public class Dog implements DogImpl{
    @Override
    public void cry() {
        System.out.println("狗叫");
    }

    @Override
    public void catchMice() {

    }
}
package Adapter.BothWay;

public interface DogImpl {
    public void cry();
    public void catchMice();
}
package Adapter.BothWay;

public class Client {
    public static void main(String[] args) {
        Adapter adapter = new Adapter();
        CatImpl cat = new Cat();
        DogImpl dog = new Dog();
        adapter.setCat(cat);
        adapter.setDog(dog);
        cat = (CatImpl) adapter;
        cat.cry();
        dog = (DogImpl) adapter;
        dog.catchMice();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1286497.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

外包干了8个月,技术退步明显.......

先说一下自己的情况,大专生,18年通过校招进入武汉某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

Hello World

世界上最著名的程序 from fastapi import FastAPIapp FastAPI()app.get("/") async def root():return {"message": "Hello World"}app.get("/hello/{name}") async def say_hello(name: str):return {"message": f"…

Python实现FA萤火虫优化算法优化BP神经网络回归模型(BP神经网络回归算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 萤火虫算法(Fire-fly algorithm,FA)由剑桥大学Yang于2009年提出 , …

通过断点调试解决node 运行js程序直接退出(没有任何报错提示)的问题

现象: node运行程序直接退出,但是从echo $?的返回值可以知道: 一定出现了错误,但是没有显示出来 解决办法: 1. 使用node --inspect-brk 启动程序 然后在浏览器访问chrome://inspect 然后点击inspect 进行单步调试 …

BearPi Std 板从入门到放弃 - 引气入体篇(6)(定时器TIM2)

简介 基于前面几篇, 增加定时器方面内容, LED定时闪动, 串口定时打印; 如前几篇所说, 使用BearPi Std板进行学习测试, 本例 开发板 : Bearpi Std(小熊派标准板) 主芯片: STM32L431RCT6 LED : PC13 \ 推挽输出即可 \ 高电平点亮 …

股价暴涨192%后,夏威夷控股股票还值得买入吗?

来源:猛兽财经 作者:猛兽财经 这两家公司计划组建一个横跨太平洋的航空公司 阿拉斯加航空(ALK )近期宣布它已和夏威夷航空(HA)达成协议,将以19亿美元现金和承担债务的方式收购夏威夷控股的母公司。 但这一消息却使两家公司的股价走向了相反的…

QT 无法打开包括文件 “xxxx.h”: No such file or direcotry 提升控件后提示找不到头文件

问题复现 UI文件提升控件后,提示找不到头文件。 原因 Qt中的ui文件会经过moc编辑器生成ui_xxx.h头文件。 在主页面的ui文件中因为使用了提升的widget,所以ui的ui头文件因该包含自定义控件的头文件。但是头文件的路径可以看出已经错误了。 #include &…

vue3 vue-router的安装及配置 (一)

文章目录 一、安装二、Vue Router配置2.1 vue-router两种引入方式的区别2.2 不同的历史模式 三、router-link四、router-view Vue Router作用:在应用程序中实现优雅的导航和路由管理。 一、安装 注意:vue3安装的是vue-router4,vue2安装的是vue-router3…

Java核心知识点整理大全27-笔记(已完结)

目录 30. 云计算 30.1.1. SaaS 30.1.2. PaaS 30.1.3. IaaS 30.1.4. Docker 30.1.4.1. 概念 30.1.4.2. Namespaces 30.1.4.3. 进程(CLONE_NEWPID 实现的进程隔离) 30.1.4.4. Libnetwork 与网络隔离 30.1.4.5. 资源隔离与 CGroups 30.1.4.6. 镜像与 UnionFS 30.1.4.7.…

2024年天津财经大学珠江学院专升本专业课《管理学原理》考试大纲

天津财经大学珠江学院2024年高职升本科专业课考试《管理学原理》考试大纲 一、本大纲系天津财经大学珠江学院2024年高职升本科《管理学原理》课程考试大纲。所列考试范围出自徐碧琳主编的教材《管理学原理(第二版)》,机械工业出版社&#xff…

玻色量子计算应用奖公布!MathorCup大赛圆满落幕

2023年8月15日,中国优选法统筹法与经济数学研究会主办的2023年第十三届MathorCup高校数学建模挑战赛圆满落幕。为了培养优秀学子的创新意识及运用数学方法和量子计算技术解决实际问题的能力,推动量子计算的实际落地应用,北京玻色量子科技有限…

【读点论文】A Survey of Quantization Methods for Efficient Neural Network Inference

A Survey of Quantization Methods for Efficient Neural Network Inference Abstract 一旦抽象的数学计算适应了数字计算机的计算,在这些计算中如何有效地表示、处理和传递数值的问题就出现了。与数字表示问题密切相关的是量化问题:一组连续的实值数应该以何种方…

计算机专业拟招100人,只考数据结构或计算机网络!石家庄铁道大学2024年硕士研究生招生简章

石家庄铁道大学2024招生简章 计算机专业目录 计算机专业参考书目 初试书目 814 数据结构(一) 《数据结构(C 语言版)》(第 2 版) 人民邮电出版社,严蔚敏,李冬梅,吴伟民…

header二

第二题就是在referer添加SQL语句进行注入和上一题步骤一样 第三题 再用上面那个方法就行不通了,多加了一层过滤 1and updatexml(1,"1",1),1) -- 1 1and updatexml(1,concat("1",(select database())),1),1) -- 1 1and updatexml(1,concat("…

解决typescript报错:找不到名称xxx

现象: 原因:在同时导入默认导出和命名导出时,默认导出必须放在命名导出之前 下面的就是原始文件: 默认导出指: export default导出类型, import时无需大括号 命名导出指: 仅有export关键字…

全面对比:21款主流免费项目管理系统的优劣势

国内外免费的21款项目管理工具:1.国产研发项目管理软件- PingCode ;2.国产免费项目协作管理工具- Worktile ;3.个人免费项目管理软件-Teambition;4.开源免费项目管理系统-Redmine;5.免费的项目规划工具-Bitrix24 &…

SpringBoot + Spring Cloud Alibaba + Nacos实现服务管理

1、参考文档 Spring Cloud Alibaba参考文档 https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/zh-cn/index.html Spring Cloud Alibaba官方文档 https://github.com/alibaba/spring-cloud-alibaba/wiki/ 2、引入 Alibaba 依赖 每个 SpringBoot 都有对应的…

springboot 整合 RocketMQ 可用于物联网,电商高并发场景下削峰,保证系统的高可用

本文根据阿里云 RocketMQ产品文档整理,地址:https://help.aliyun.com/document_detail/29532.html?userCodeqtldtin2 RocketMQ是由阿里捐赠给Apache的一款低延迟、高并发、高可用、高可靠的分布式消息中间件。经历了淘宝双十一的洗礼。RocketMQ既可为分布式应用系统…

软件测试,缺少项目实战怎么办?

解决办法 你可以进行一个简单的web测试。 以我目前的认知和经验,悄悄告诉你:政府网站大概率会有bug。 在著此文时,我随便找了个地方政府网站,点了进去。 http://www.yibin.gov.cn/en/ybsq/201905/t20190513_976652.html 大家…

(04730)电路分析基础之电路概述

https://www.yuque.com/huangzhanqi/nrt1l4/ffxapo8ql8l2ouux(完整笔记) 电路有实际电路与电路模型之分,前者是实际存在的电路,后者是把实际电路在一定条件下理想化而得到。 电路 电路就是电流通过的闭合路径,它是由…