当前位置: 首页 > news >正文

软件设计之适配器模式

类模式

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

 

package Adapter.Class;public class Adapter extends Power220V implements Power5V {@Overridepublic 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{@Overridepublic 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;}@Overridepublic 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;}@Overridepublic void catchMice() {System.out.print("狗学");cat.catchMice();}@Overridepublic void cry() {System.out.print("猫学");dog.cry();}
}
package Adapter.BothWay;public class Cat implements CatImpl{@Overridepublic void catchMice() {System.out.println("猫抓老鼠");}@Overridepublic void cry() {}
}
package Adapter.BothWay;public interface CatImpl {public void catchMice();public void cry();
}
package Adapter.BothWay;public class Dog implements DogImpl{@Overridepublic void cry() {System.out.println("狗叫");}@Overridepublic 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.lryc.cn/news/254182.html

相关文章:

  • 虚拟化逻辑架构:OVS 交换机与端口管理
  • 【springboot】idea项目启动端口被占用
  • linux环境下编译安装OpenCV For Java(CentOS 7)
  • 健康学习到 150 岁:人体系统调优不完全指南 | 开源日报 No.93
  • C++ Easyx 三子棋
  • [NAND Flash 2.1] NAND Flash 闪存改变了现代生活
  • 2015年五一杯数学建模B题空气污染问题研究解题全过程文档及程序
  • java面试题,上楼梯有多少种方式
  • 8.HTTP工作原理
  • 环境部署的学习笔记(Docker)
  • Navicat在分辨率不同的屏幕窗口显示大小不一致问题解决
  • 通过代码搞明白JAVA中值传递和引用传递
  • ambari 开启hdfs回收站机制
  • 服务器数据恢复—服务器重装系统导致逻辑卷发生改变的数据恢复案例
  • 软件工程之架构设计
  • oracle java.sql.SQLException: Invalid column type: 1111
  • Mac 浏览器下载的文件名总是「乱码」
  • Redis Reactor事件驱动模型源码
  • cv2.error: OpenCV(4.7.0)
  • 10.vue3项目(十):spu管理页面的sku的新增和修改
  • Java LeetCode篇-深入了解二叉树经典解法(三种方式实现:获取二叉树的最大深度)
  • Image Segmentation Using Deep Learning: A Survey
  • 可视化开源编辑器Swagger Editor本地部署并实现远程访问管理编辑文档
  • Java TCP协议实现一对一聊天与UDP协议实现群聊案例
  • 【从0配置JAVA项目相关环境1】jdk + VSCode运行java + mysql + Navicat + 数据库本地化 + 启动java项目
  • 人工智能_机器学习053_支持向量机SVM目标函数推导_SVM条件_公式推导过程---人工智能工作笔记0093
  • 二叉树的前、中和后序遍历的递归与迭代实现
  • 人体姿态估计算法
  • docker部署jupyter
  • 音视频的功耗优化