当前位置: 首页> 汽车> 车展 > 适配器模式和装饰器模式

适配器模式和装饰器模式

时间:2025/8/23 23:43:09来源:https://blog.csdn.net/m0_64637029/article/details/139609483 浏览次数: 0次

文章目录

  • 适配器模式
    • 1.引出适配器模式
        • 1.多功能转换插头
        • 2.基本介绍
        • 3.工作原理
    • 2.类适配器
        • 1.基本介绍
        • 2.类图
        • 3.代码实现
          • 1.Voltage220V.java
          • 2.Voltage5V.java
          • 3.VoltageAdapter.java
          • 4.Phone.java
          • 5.Client.java
          • 6.结果
        • 4.类适配器的注意事项
    • 3.对象适配器
        • 1.基本介绍
        • 2.使用对象适配器改进类适配器
          • 1.类图
          • 2.介绍
        • 3.代码实现
          • 1.修改VoltageAdapter.java 构造器聚合被适配的对象
          • 2.修改Client.java 传入被适配的对象
    • 4.接口适配器模式
        • 1.基本介绍
        • 2.类图
        • 3.目录结构
        • 4.代码实现
          • 1.Interface.java
          • 2.AbsAdapter.java
          • 3.ClassA.java
          • 4.结果
  • 适配器模式
    • 1.引出适配器模式
        • 1.多功能转换插头
        • 2.基本介绍
        • 3.工作原理
    • 2.类适配器
        • 1.基本介绍
        • 2.类图
        • 3.代码实现
          • 1.Voltage220V.java
          • 2.Voltage5V.java
          • 3.VoltageAdapter.java
          • 4.Phone.java
          • 5.Client.java
          • 6.结果
        • 4.类适配器的注意事项
    • 3.对象适配器
        • 1.基本介绍
        • 2.使用对象适配器改进类适配器
          • 1.类图
          • 2.介绍
        • 3.代码实现
          • 1.修改VoltageAdapter.java 构造器聚合被适配的对象
          • 2.修改Client.java 传入被适配的对象
    • 4.接口适配器模式
        • 1.基本介绍
        • 2.类图
        • 3.目录结构
        • 4.代码实现
          • 1.Interface.java
          • 2.AbsAdapter.java
          • 3.ClassA.java
          • 4.结果

适配器模式

1.引出适配器模式

1.多功能转换插头

image-20240529203251649

2.基本介绍

image-20240529203509980

3.工作原理

image-20240529203741032

2.类适配器

1.基本介绍

image-20240529203956891

2.类图

image-20240529205154428

3.代码实现
1.Voltage220V.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
package com.sun.classadapter;/*** Description: 适配器的接口* @Author sun* @Create 2024/5/29 20:56* @Version 1.0*/
public interface Voltage5V {// 用于将5V的电压适配到220Vpublic int output5V();
}
3.VoltageAdapter.java
package com.sun.classadapter;/*** Description: 适配器* @Author sun* @Create 2024/5/29 20:58* @Version 1.0*/
public class VoltageAdapter extends Voltage220V implements Voltage5V{@Overridepublic int output5V() {// 将220V的电压适配到5Vint srcV = super.output220V();int disV = srcV / 44;return disV;}
}
4.Phone.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
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.结果

image-20240529211353436

4.类适配器的注意事项

image-20240529211706653

3.对象适配器

1.基本介绍

image-20240529211827759

2.使用对象适配器改进类适配器
1.类图

image-20240529212625622

2.介绍

image-20240529212038831

3.代码实现
1.修改VoltageAdapter.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;}@Overridepublic int output5V() {// 将220V的电压适配到5Vint disV = 0;if (voltage220V != null) {int srcV = voltage220V.output220V();disV = srcV / 44;}return disV;}
}
2.修改Client.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.基本介绍

image-20240531194529065

2.类图

image-20240531195619680

3.目录结构

image-20240531200449553

4.代码实现
1.Interface.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
package com.sun.interfaceadapter;/*** Description:* @Author sun* @Create 2024/5/31 19:58* @Version 1.0*/
public abstract class AbsAdapter implements Interface{@Overridepublic void m4() {}@Overridepublic void m3() {}@Overridepublic void m2() {}@Overridepublic void m1() {}
}
3.ClassA.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() {@Overridepublic void m1() {System.out.println("重写了m1方法");}};absAdapter.m1();}
}
4.结果

image-20240531200605292

适配器模式

1.引出适配器模式

1.多功能转换插头

image-20240529203251649

2.基本介绍

image-20240529203509980

3.工作原理

image-20240529203741032

2.类适配器

1.基本介绍

image-20240529203956891

2.类图

image-20240529205154428

3.代码实现
1.Voltage220V.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
package com.sun.classadapter;/*** Description: 适配器的接口* @Author sun* @Create 2024/5/29 20:56* @Version 1.0*/
public interface Voltage5V {// 用于将5V的电压适配到220Vpublic int output5V();
}
3.VoltageAdapter.java
package com.sun.classadapter;/*** Description: 适配器* @Author sun* @Create 2024/5/29 20:58* @Version 1.0*/
public class VoltageAdapter extends Voltage220V implements Voltage5V{@Overridepublic int output5V() {// 将220V的电压适配到5Vint srcV = super.output220V();int disV = srcV / 44;return disV;}
}
4.Phone.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
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.结果

image-20240529211353436

4.类适配器的注意事项

image-20240529211706653

3.对象适配器

1.基本介绍

image-20240529211827759

2.使用对象适配器改进类适配器
1.类图

image-20240529212625622

2.介绍

image-20240529212038831

3.代码实现
1.修改VoltageAdapter.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;}@Overridepublic int output5V() {// 将220V的电压适配到5Vint disV = 0;if (voltage220V != null) {int srcV = voltage220V.output220V();disV = srcV / 44;}return disV;}
}
2.修改Client.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.基本介绍

image-20240531194529065

2.类图

image-20240531195619680

3.目录结构

image-20240531200449553

4.代码实现
1.Interface.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
package com.sun.interfaceadapter;/*** Description:* @Author sun* @Create 2024/5/31 19:58* @Version 1.0*/
public abstract class AbsAdapter implements Interface{@Overridepublic void m4() {}@Overridepublic void m3() {}@Overridepublic void m2() {}@Overridepublic void m1() {}
}
3.ClassA.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() {@Overridepublic void m1() {System.out.println("重写了m1方法");}};absAdapter.m1();}
}
4.结果

image-20240531200605292

关键字:适配器模式和装饰器模式

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: