文章目录
适配器模式
1.引出适配器模式
1.多功能转换插头
2.基本介绍
3.工作原理
2.类适配器
1.基本介绍
2.类图
3.代码实现
1.Voltage220V.java
java
复制代码
package com.sun.classadapter;
/**
* Description: 被适配者
* @Author sun
* @Create 2024/5/29 20:53
* @Version 1.0
*/
public class Voltage220V {
public int output220V() {
int src = 220;
System.out.println("电压输出为" + src + "伏");
return src;
}
}
2.Voltage5V.java
java
复制代码
package com.sun.classadapter;
/**
* Description: 适配器的接口
* @Author sun
* @Create 2024/5/29 20:56
* @Version 1.0
*/
public interface Voltage5V {
// 用于将5V的电压适配到220V
public int output5V();
}
3.VoltageAdapter.java
java
复制代码
package com.sun.classadapter;
/**
* Description: 适配器
* @Author sun
* @Create 2024/5/29 20:58
* @Version 1.0
*/
public class VoltageAdapter extends Voltage220V implements Voltage5V{
@Override
public int output5V() {
// 将220V的电压适配到5V
int srcV = super.output220V();
int disV = srcV / 44;
return disV;
}
}
4.Phone.java
java
复制代码
package com.sun.classadapter;
/**
* Description: 使用者
* @Author sun
* @Create 2024/5/29 21:00
* @Version 1.0
*/
public class Phone {
// 依赖一个适配器进行充电
public void charging(Voltage5V voltage5V) {
if (voltage5V.output5V() == 5) {
System.out.println("电压为5V,适配成功,可以开始充电");
} else {
System.out.println("电压不为5V,无法充电!");
}
}
}
5.Client.java
java
复制代码
package com.sun.classadapter;
/**
* Description:
* @Author sun
* @Create 2024/5/29 21:03
* @Version 1.0
*/
public class Client {
public static void main(String[] args) {
Phone phone = new Phone();
// 给手机装配一个5V的适配器进行充电
phone.charging(new VoltageAdapter());
}
}
6.结果
4.类适配器的注意事项
3.对象适配器
1.基本介绍
2.使用对象适配器改进类适配器
1.类图
2.介绍
3.代码实现
1.修改VoltageAdapter.java 构造器聚合被适配的对象
java
复制代码
package com.sun.objectadapter;
/**
* Description: 适配器
* @Author sun
* @Create 2024/5/29 20:58
* @Version 1.0
*/
public class VoltageAdapter implements Voltage5V {
private Voltage220V voltage220V;
// 使用构造器聚合被适配的对象
public VoltageAdapter(Voltage220V voltage220V) {
this.voltage220V = voltage220V;
}
@Override
public int output5V() {
// 将220V的电压适配到5V
int disV = 0;
if (voltage220V != null) {
int srcV = voltage220V.output220V();
disV = srcV / 44;
}
return disV;
}
}
2.修改Client.java 传入被适配的对象
java
复制代码
package com.sun.objectadapter;
/**
* Description:
* @Author sun
* @Create 2024/5/29 21:03
* @Version 1.0
*/
public class Client {
public static void main(String[] args) {
Phone phone = new Phone();
// 给手机装配一个5V的适配器进行充电
phone.charging(new VoltageAdapter(new Voltage220V()));
}
}
4.接口适配器模式
1.基本介绍
2.类图
3.目录结构
4.代码实现
1.Interface.java
java
复制代码
package com.sun.interfaceadapter;
/**
* Description: 一个接口有四个方法,但是普通的类不想全部实现
* @Author sun
* @Create 2024/5/31 19:57
* @Version 1.0
*/
public interface Interface {
public void m1();
public void m2();
public void m3();
public void m4();
}
2.AbsAdapter.java
java
复制代码
package com.sun.interfaceadapter;
/**
* Description:
* @Author sun
* @Create 2024/5/31 19:58
* @Version 1.0
*/
public abstract class AbsAdapter implements Interface{
@Override
public void m4() {
}
@Override
public void m3() {
}
@Override
public void m2() {
}
@Override
public void m1() {
}
}
3.ClassA.java
java
复制代码
package com.sun.interfaceadapter;
/**
* Description: 普通的类重写抽象类的方法
* @Author sun
* @Create 2024/5/31 19:59
* @Version 1.0
*/
public class ClassA {
public static void main(String[] args) {
// 如果想要使用接口的某个方法,就直接使用匿名内部类继承抽象类,重写其中的方法
AbsAdapter absAdapter = new AbsAdapter() {
@Override
public void m1() {
System.out.println("重写了m1方法");
}
};
absAdapter.m1();
}
}
4.结果
适配器模式
1.引出适配器模式
1.多功能转换插头
2.基本介绍
3.工作原理
2.类适配器
1.基本介绍
2.类图
3.代码实现
1.Voltage220V.java
java
复制代码
package com.sun.classadapter;
/**
* Description: 被适配者
* @Author sun
* @Create 2024/5/29 20:53
* @Version 1.0
*/
public class Voltage220V {
public int output220V() {
int src = 220;
System.out.println("电压输出为" + src + "伏");
return src;
}
}
2.Voltage5V.java
java
复制代码
package com.sun.classadapter;
/**
* Description: 适配器的接口
* @Author sun
* @Create 2024/5/29 20:56
* @Version 1.0
*/
public interface Voltage5V {
// 用于将5V的电压适配到220V
public int output5V();
}
3.VoltageAdapter.java
java
复制代码
package com.sun.classadapter;
/**
* Description: 适配器
* @Author sun
* @Create 2024/5/29 20:58
* @Version 1.0
*/
public class VoltageAdapter extends Voltage220V implements Voltage5V{
@Override
public int output5V() {
// 将220V的电压适配到5V
int srcV = super.output220V();
int disV = srcV / 44;
return disV;
}
}
4.Phone.java
java
复制代码
package com.sun.classadapter;
/**
* Description: 使用者
* @Author sun
* @Create 2024/5/29 21:00
* @Version 1.0
*/
public class Phone {
// 依赖一个适配器进行充电
public void charging(Voltage5V voltage5V) {
if (voltage5V.output5V() == 5) {
System.out.println("电压为5V,适配成功,可以开始充电");
} else {
System.out.println("电压不为5V,无法充电!");
}
}
}
5.Client.java
java
复制代码
package com.sun.classadapter;
/**
* Description:
* @Author sun
* @Create 2024/5/29 21:03
* @Version 1.0
*/
public class Client {
public static void main(String[] args) {
Phone phone = new Phone();
// 给手机装配一个5V的适配器进行充电
phone.charging(new VoltageAdapter());
}
}
6.结果
4.类适配器的注意事项
3.对象适配器
1.基本介绍
2.使用对象适配器改进类适配器
1.类图
2.介绍
3.代码实现
1.修改VoltageAdapter.java 构造器聚合被适配的对象
java
复制代码
package com.sun.objectadapter;
/**
* Description: 适配器
* @Author sun
* @Create 2024/5/29 20:58
* @Version 1.0
*/
public class VoltageAdapter implements Voltage5V {
private Voltage220V voltage220V;
// 使用构造器聚合被适配的对象
public VoltageAdapter(Voltage220V voltage220V) {
this.voltage220V = voltage220V;
}
@Override
public int output5V() {
// 将220V的电压适配到5V
int disV = 0;
if (voltage220V != null) {
int srcV = voltage220V.output220V();
disV = srcV / 44;
}
return disV;
}
}
2.修改Client.java 传入被适配的对象
java
复制代码
package com.sun.objectadapter;
/**
* Description:
* @Author sun
* @Create 2024/5/29 21:03
* @Version 1.0
*/
public class Client {
public static void main(String[] args) {
Phone phone = new Phone();
// 给手机装配一个5V的适配器进行充电
phone.charging(new VoltageAdapter(new Voltage220V()));
}
}
4.接口适配器模式
1.基本介绍
2.类图
3.目录结构
4.代码实现
1.Interface.java
java
复制代码
package com.sun.interfaceadapter;
/**
* Description: 一个接口有四个方法,但是普通的类不想全部实现
* @Author sun
* @Create 2024/5/31 19:57
* @Version 1.0
*/
public interface Interface {
public void m1();
public void m2();
public void m3();
public void m4();
}
2.AbsAdapter.java
java
复制代码
package com.sun.interfaceadapter;
/**
* Description:
* @Author sun
* @Create 2024/5/31 19:58
* @Version 1.0
*/
public abstract class AbsAdapter implements Interface{
@Override
public void m4() {
}
@Override
public void m3() {
}
@Override
public void m2() {
}
@Override
public void m1() {
}
}
3.ClassA.java
java
复制代码
package com.sun.interfaceadapter;
/**
* Description: 普通的类重写抽象类的方法
* @Author sun
* @Create 2024/5/31 19:59
* @Version 1.0
*/
public class ClassA {
public static void main(String[] args) {
// 如果想要使用接口的某个方法,就直接使用匿名内部类继承抽象类,重写其中的方法
AbsAdapter absAdapter = new AbsAdapter() {
@Override
public void m1() {
System.out.println("重写了m1方法");
}
};
absAdapter.m1();
}
}
4.结果