适配器模式
1.引出适配器模式
1.多功能转换插头
![image-20240529203251649](https://img-blog.csdnimg.cn/img_convert/0eaa2283dc2d581949e9337d79a69a63.png)
2.基本介绍
![image-20240529203509980](https://img-blog.csdnimg.cn/img_convert/76459a08669f2696527de0ec6cdb50d1.png)
3.工作原理
![image-20240529203741032](https://img-blog.csdnimg.cn/img_convert/5520b89bf47199fc609f18fc79639883.png)
2.类适配器
1.基本介绍
![image-20240529203956891](https://img-blog.csdnimg.cn/img_convert/8a33e62568f1080f3abdb53901bf629b.png)
2.类图
![image-20240529205154428](https://img-blog.csdnimg.cn/img_convert/3ce4f4354a679938adfb4da15dc8155a.png)
3.代码实现
1.Voltage220V.java
package com.sun.classadapter;
public class Voltage220V {
public int output220V() {
int src = 220;
System.out.println("电压输出为" + src + "伏");
return src;
}
}
2.Voltage5V.java
package com.sun.classadapter;
public interface Voltage5V {
public int output5V();
}
3.VoltageAdapter.java
package com.sun.classadapter;
public class VoltageAdapter extends Voltage220V implements Voltage5V{
@Override
public int output5V() {
int srcV = super.output220V();
int disV = srcV / 44;
return disV;
}
}
4.Phone.java
package com.sun.classadapter;
public class Phone {
public void charging(Voltage5V voltage5V) {
if (voltage5V.output5V() == 5) {
System.out.println("电压为5V,适配成功,可以开始充电");
} else {
System.out.println("电压不为5V,无法充电!");
}
}
}
5.Client.java
package com.sun.classadapter;
public class Client {
public static void main(String[] args) {
Phone phone = new Phone();
phone.charging(new VoltageAdapter());
}
}
6.结果
![image-20240529211353436](https://img-blog.csdnimg.cn/img_convert/98e8dbadb5ddff28171b2f01e5380450.png)
4.类适配器的注意事项
![image-20240529211706653](https://img-blog.csdnimg.cn/img_convert/c9204116ae3d4d9abc0e48826c5ef438.png)
3.对象适配器
1.基本介绍
![image-20240529211827759](https://img-blog.csdnimg.cn/img_convert/50b9f7f98d19f23fd3282130bd83368e.png)
2.使用对象适配器改进类适配器
1.类图
![image-20240529212625622](https://img-blog.csdnimg.cn/img_convert/2fdb55ba1cb2b6d7decaf8f111c7eed3.png)
2.介绍
![image-20240529212038831](https://img-blog.csdnimg.cn/img_convert/a30486e956b980e040f9a9d71d66a855.png)
3.代码实现
1.修改VoltageAdapter.java 构造器聚合被适配的对象
package com.sun.objectadapter;
public class VoltageAdapter implements Voltage5V {
private Voltage220V voltage220V;
public VoltageAdapter(Voltage220V voltage220V) {
this.voltage220V = voltage220V;
}
@Override
public int output5V() {
int disV = 0;
if (voltage220V != null) {
int srcV = voltage220V.output220V();
disV = srcV / 44;
}
return disV;
}
}
2.修改Client.java 传入被适配的对象
package com.sun.objectadapter;
public class Client {
public static void main(String[] args) {
Phone phone = new Phone();
phone.charging(new VoltageAdapter(new Voltage220V()));
}
}
4.接口适配器模式
1.基本介绍
![image-20240531194529065](https://img-blog.csdnimg.cn/img_convert/12aafffc6fc63aa4af4b6f954a6b1f6a.png)
2.类图
![image-20240531195619680](https://img-blog.csdnimg.cn/img_convert/a20487a61b434bf9a07c331b8ccb504a.png)
3.目录结构
![image-20240531200449553](https://img-blog.csdnimg.cn/img_convert/272eeef9e8fe6fc8169145c8bc039840.png)
4.代码实现
1.Interface.java
package com.sun.interfaceadapter;
public interface Interface {
public void m1();
public void m2();
public void m3();
public void m4();
}
2.AbsAdapter.java
package com.sun.interfaceadapter;
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
package com.sun.interfaceadapter;
public class ClassA {
public static void main(String[] args) {
AbsAdapter absAdapter = new AbsAdapter() {
@Override
public void m1() {
System.out.println("重写了m1方法");
}
};
absAdapter.m1();
}
}
4.结果
![image-20240531200605292](https://img-blog.csdnimg.cn/img_convert/8a9d02b810665c7b317b40f24dabca7e.png)
适配器模式
1.引出适配器模式
1.多功能转换插头
![image-20240529203251649](https://img-blog.csdnimg.cn/img_convert/fb93128a31acf3887b1fc5d4d5b21604.png)
2.基本介绍
![image-20240529203509980](https://img-blog.csdnimg.cn/img_convert/4c8d84d513e2f2a56bf2c06418c76555.png)
3.工作原理
![image-20240529203741032](https://img-blog.csdnimg.cn/img_convert/7c5279e9aaf2a696bc0b2613014b80ad.png)
2.类适配器
1.基本介绍
![image-20240529203956891](https://img-blog.csdnimg.cn/img_convert/081a2771358835492c5872a94d4d58c7.png)
2.类图
![image-20240529205154428](https://img-blog.csdnimg.cn/img_convert/f4d5b17617fd697da259234ea94b2663.png)
3.代码实现
1.Voltage220V.java
package com.sun.classadapter;
public class Voltage220V {
public int output220V() {
int src = 220;
System.out.println("电压输出为" + src + "伏");
return src;
}
}
2.Voltage5V.java
package com.sun.classadapter;
public interface Voltage5V {
public int output5V();
}
3.VoltageAdapter.java
package com.sun.classadapter;
public class VoltageAdapter extends Voltage220V implements Voltage5V{
@Override
public int output5V() {
int srcV = super.output220V();
int disV = srcV / 44;
return disV;
}
}
4.Phone.java
package com.sun.classadapter;
public class Phone {
public void charging(Voltage5V voltage5V) {
if (voltage5V.output5V() == 5) {
System.out.println("电压为5V,适配成功,可以开始充电");
} else {
System.out.println("电压不为5V,无法充电!");
}
}
}
5.Client.java
package com.sun.classadapter;
public class Client {
public static void main(String[] args) {
Phone phone = new Phone();
phone.charging(new VoltageAdapter());
}
}
6.结果
![image-20240529211353436](https://img-blog.csdnimg.cn/img_convert/eacbce7945191cf9af1ff9bd1029b6c2.png)
4.类适配器的注意事项
![image-20240529211706653](https://img-blog.csdnimg.cn/img_convert/957879fabf360decbfd245a9a5a06d64.png)
3.对象适配器
1.基本介绍
![image-20240529211827759](https://img-blog.csdnimg.cn/img_convert/5f4bb0313d5e1406ddd6fd1ecfb79873.png)
2.使用对象适配器改进类适配器
1.类图
![image-20240529212625622](https://img-blog.csdnimg.cn/img_convert/b51ded2cb8023ad67ac56dc15515ca4a.png)
2.介绍
![image-20240529212038831](https://img-blog.csdnimg.cn/img_convert/bae26b27f4da0ce41b8a719ed15ef7fa.png)
3.代码实现
1.修改VoltageAdapter.java 构造器聚合被适配的对象
package com.sun.objectadapter;
public class VoltageAdapter implements Voltage5V {
private Voltage220V voltage220V;
public VoltageAdapter(Voltage220V voltage220V) {
this.voltage220V = voltage220V;
}
@Override
public int output5V() {
int disV = 0;
if (voltage220V != null) {
int srcV = voltage220V.output220V();
disV = srcV / 44;
}
return disV;
}
}
2.修改Client.java 传入被适配的对象
package com.sun.objectadapter;
public class Client {
public static void main(String[] args) {
Phone phone = new Phone();
phone.charging(new VoltageAdapter(new Voltage220V()));
}
}
4.接口适配器模式
1.基本介绍
![image-20240531194529065](https://img-blog.csdnimg.cn/img_convert/bcd280190136f56038f3cd38ee080475.png)
2.类图
![image-20240531195619680](https://img-blog.csdnimg.cn/img_convert/cda1d9a05094a74fc8fbc6f135271054.png)
3.目录结构
![image-20240531200449553](https://img-blog.csdnimg.cn/img_convert/57af7453b45134c8e13271385c70f62a.png)
4.代码实现
1.Interface.java
package com.sun.interfaceadapter;
public interface Interface {
public void m1();
public void m2();
public void m3();
public void m4();
}
2.AbsAdapter.java
package com.sun.interfaceadapter;
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
package com.sun.interfaceadapter;
public class ClassA {
public static void main(String[] args) {
AbsAdapter absAdapter = new AbsAdapter() {
@Override
public void m1() {
System.out.println("重写了m1方法");
}
};
absAdapter.m1();
}
}
4.结果
![image-20240531200605292](https://img-blog.csdnimg.cn/img_convert/08ace033efff896a98e9cfd72abf41b1.png)