适配器模式和装饰器模式

2024-06-12 01:28
文章标签 适配器 模式 装饰

本文主要是介绍适配器模式和装饰器模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 适配器模式
    • 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

这篇关于适配器模式和装饰器模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1052811

相关文章

如何开启和关闭3GB模式

https://jingyan.baidu.com/article/4d58d5414dfc2f9dd4e9c082.html

十四、观察者模式与访问者模式详解

21.观察者模式 21.1.课程目标 1、 掌握观察者模式和访问者模式的应用场景。 2、 掌握观察者模式在具体业务场景中的应用。 3、 了解访问者模式的双分派。 4、 观察者模式和访问者模式的优、缺点。 21.2.内容定位 1、 有 Swing开发经验的人群更容易理解观察者模式。 2、 访问者模式被称为最复杂的设计模式。 21.3.观察者模式 观 察 者 模 式 ( Obser

flask 中使用 装饰器

因为要完成毕业设计,我用到fountain code做数据恢复。 于是在github上下载了fountain code的python原代码。 github上的作者用flask做了fountain code的demo。 flask是面向python的一个网站框架。 里面有用到装饰器。 今天笔试的时候,我也被问到了python的装饰器。

Builder模式的实现

概念 在创建复杂对象时,将创建该对象的工作交给一个建造者,这个建造者就是一个Builder。在日常的开发中,常常看到,如下这些代码: AlertDialog的实现 AlertDialog.Builder builder = new AlertDialog.Builder(context);builder.setMessage("你好建造者");builder.setTitle

(13)DroneCAN 适配器节点(一)

文章目录 前言 1 特点 2 固件  3 ArduPilot固件DroneCAN设置 4 DroneCAN适配器节点 前言 这些节点允许现有的 ArduPilot 支持的外围设备作为 DroneCAN 或 MSP 设备适应 CAN 总线。这也允许扩展自动驾驶仪硬件的功能。如允许 I2C 设备(如罗盘或空速)距离自动驾驶仪 1m 以上,并实现多达 32 个伺服输出通道。

Android必学之数据适配器BaseAdapter

https://www.cnblogs.com/caobotao/p/5061627.html

[分布式网络通讯框架]----ZooKeeper下载以及Linux环境下安装与单机模式部署(附带每一步截图)

首先进入apache官网 点击中间的see all Projects->Project List菜单项进入页面 找到zookeeper,进入 在Zookeeper主页的顶部点击菜单Project->Releases,进入Zookeeper发布版本信息页面,如下图: 找到需要下载的版本 进行下载既可,这里我已经下载过3.4.10,所以以下使用3.4.10进行演示其他的步骤。

《分析模式》“鸦脚”表示法起源,Everest、Barker和Hay

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 《分析模式》这本书里面用的并不是UML表示法。作者Martin Fowler在书中也说了,该书写于1994-1995年,当时还没有UML。作者在书中用的是一种常被人称为“鸦脚”的表示法。  有的同学会有误解,例如有同学发表以下感想: “鸦脚”表示法当然不是Fowler先使用的。F

设计模式学习之中介者模式

我们平时写代码的过程,一个类必然会与其他类产生依赖关系,如果这种依赖关系如网状般错综复杂,那么必然会影响我们的代码逻辑以及执行效率,适当地使用中介者模式可以对这种依赖关系进行解耦使逻辑结构清晰,本篇博客,我们就一起学习中介者模式。 定义及使用场景 定义:中介者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用。从而使它们可以松散耦合。当某些对象之间的作用发生改变时,不会立即影响其