Java 设计模式之适配器模式,Java 类适配器,Java 对象适配器
Java 设计模式之适配器模式,
Java 类适配器,
Java 对象适配器
================================
©Copyright 蕃薯耀 2021-06-30
https://www.cnblogs.com/fanshuyao/
一、类适配器
1、目标接口
public interface IVoltage { public int output(); }
2、目标类
public class Voltage220 implements IVoltage{ @Override public int output() { System.out.println("电源输出220V电压"); return 220; } }
3、类适配器(适配器英文是:Adapter,非Adaptor,示例中写错了)
/** * 类适配器,通过继承目标类(Voltage220)和实现目标接口(IVoltage) * */ public class Voltage10Adaptor extends Voltage220 implements IVoltage{ @Override public int output() { int v220 = super.output(); int v10 = v220 / 22; System.out.println("适配器输出"+ v10 +"V电压"); return v10; } }
4、手机类
public class Mobile { private IVoltage iVoltage; public IVoltage getiVoltage() { return iVoltage; } public void setiVoltage(IVoltage iVoltage) { this.iVoltage = iVoltage; } public Mobile(IVoltage iVoltage) { super(); this.iVoltage = iVoltage; } //充电 public void charge() { if(this.iVoltage.output() != 10) { System.out.println("电压(" + this.iVoltage.output() + ")不匹配,手机不能充电"); }else { System.out.println("手机正在充电…"); } } }
5、客户端测试类
public class Client { public static void main(String[] args) { Voltage220 voltage220 = new Voltage220(); //voltage220.output(); Mobile m = new Mobile(voltage220); m.charge(); System.out.println("-------------------------------"); Mobile m2 = new Mobile(new Voltage10Adaptor()); m2.charge(); } }
测试结果:
电源输出220V电压 电源输出220V电压 电压(220)不匹配,手机不能充电 ------------------------------- 电源输出220V电压 适配器输出10V电压 手机正在充电…
二、对象适配器
1、对象适配器类
/** * 对象适配器,就是不继承目标类,而是通过在适配器中增加目标类的对象,以构造方法注入对象的方式,解决类只能单继承的问题,因为适配器如果继承了其它类,就不能再继承目标类 * */ public class Voltage10AdaptorObject implements IVoltage{ private IVoltage iVoltage; public Voltage10AdaptorObject(IVoltage iVoltage) { this.iVoltage = iVoltage; } @Override public int output() { int vTarget = this.iVoltage.output(); int vAdaptor = 0; if(vTarget == 220) { vAdaptor = vTarget / 22; }else if(vTarget == 110) { vAdaptor = vTarget / 11; } System.out.println("适配器输出"+ vAdaptor +"V电压"); return vAdaptor; } }
2、客户端测试类
public class Client { public static void main(String[] args) { Voltage220 voltage220 = new Voltage220(); //voltage220.output(); Mobile m = new Mobile(voltage220); m.charge(); System.out.println("-------------------------------"); Mobile m2 = new Mobile(new Voltage10Adaptor()); m2.charge(); System.out.println("+++++++++++++++++++++++++++++"); Mobile m3 = new Mobile(new Voltage10AdaptorObject(voltage220)); m3.charge(); } }
测试结果:
电源输出220V电压 电源输出220V电压 电压(220)不匹配,手机不能充电 ------------------------------- 电源输出220V电压 适配器输出10V电压 手机正在充电… +++++++++++++++++++++++++++++ 电源输出220V电压 适配器输出10V电压 手机正在充电…
三、总结
适配器模式(Adapter Pattern)
将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。
适配器模式的适用环境:
系统需要使用一些现有的类,而这些类的接口(方法)不符合系统的需要,甚至没有这些类的源代码创建一个可以重复使用的类,现在就可以使用适配器模式。
三个角色:
1:Target(目标抽象类):目标抽象类定义客户所需的接口,可以是一个抽象类或接口,一般是接口,因为类是单继承(不好)。
2:Adaptee(适配者类):适配者即需要被适配的角色,它定义了一个已经存在的接口(方法),这个接口需要适配。
3:Adapter(适配器类):作为一个转换器,需要实现Target类,对Adaptee和Target进行适配。它是适配器模式的核心。
尽量使用对象的适配器模式,多用合成/聚合、少用继承。
对于类适配器,适配器可以重定义的部分行为,相当于子类覆盖父类的部分实现方法。
(时间宝贵,分享不易,捐赠回馈,^_^)
================================
©Copyright 蕃薯耀 2021-06-30
https://www.cnblogs.com/fanshuyao/
相关文章
- MySQL_(Java)【连接池】简单在JDBCUtils.java中创建连接池
- java实现第五届蓝桥杯武功秘籍
- Java实现 蓝桥杯VIP 算法提高 解二元一次方程组
- Java实现 蓝桥杯VIP 算法训练 P1101
- 将java类的泛型集合转换成json对象
- Effective Java -- 创建和销毁对象
- Android NDK开发之Jni调用Java对象
- 【JAVA】 01-Java基础知识
- [Linux] Install java and add JAVA_HOME, PATH
- 使用java将json文件反序列化成java对象
- java代码调用使用cxf搭建的webService服务传递对象
- 掌握Java命令模式:将请求封装成对象,解耦发送者和接收者的关系
- Java观察者模式:轻松实现对象间的一对多依赖
- Java组合模式:如何通过对象组合实现更高效的代码设计
- Java代理模式:如何优雅地控制对象访问?
- Java如何获取IP属地 ip2region failed to create searcher with x:java.io.FileNotFoundException:( 系统找不到指定的路径)
- 【JAVA】【NIO】5、Java NIO Scatter / Gather
- Java程序猿从笨鸟到菜鸟之(九十二)深入java虚拟机(一)——java虚拟机底层结构具体解释
- java-基础-【四】实际编程中的对象
- Java-idea-mybatis plugin插件使用
- Java Swing星座选择器界面的实现
- Java组合模式:如何通过对象组合实现更高效的代码设计
- 从零开始构建Java对象:探究建造者模式的设计之美
- 【java】Java并发编程系列-基础知识(非常详细哦)