适配器模式和装饰器模式

作者 : admin 本文共6350个字,预计阅读时间需要16分钟 发布时间: 2024-06-11 共1人阅读

文章目录

  • 适配器模式
    • 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.多功能转换插头

适配器模式和装饰器模式插图

2.基本介绍

适配器模式和装饰器模式插图(1)

3.工作原理

适配器模式和装饰器模式插图(2)

2.类适配器

1.基本介绍

适配器模式和装饰器模式插图(3)

2.类图

适配器模式和装饰器模式插图(4)

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的电压适配到220V
    public 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{
    @Override
    public int output5V() {
        // 将220V的电压适配到5V
        int 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.结果

适配器模式和装饰器模式插图(5)

4.类适配器的注意事项

适配器模式和装饰器模式插图(6)

3.对象适配器

1.基本介绍

适配器模式和装饰器模式插图(7)

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

适配器模式和装饰器模式插图(8)

2.介绍

适配器模式和装饰器模式插图(9)

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;
    }

    @Override
    public int output5V() {
        // 将220V的电压适配到5V
        int 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.基本介绍

适配器模式和装饰器模式插图(10)

2.类图

适配器模式和装饰器模式插图(11)

3.目录结构

适配器模式和装饰器模式插图(12)

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{
    @Override
    public void m4() {

    }

    @Override
    public void m3() {

    }

    @Override
    public void m2() {

    }

    @Override
    public 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() {
            @Override
            public void m1() {
                System.out.println("重写了m1方法");
            }
        };
        absAdapter.m1();
    }
}
4.结果

适配器模式和装饰器模式插图(13)

适配器模式

1.引出适配器模式

1.多功能转换插头

适配器模式和装饰器模式插图(14)

2.基本介绍

适配器模式和装饰器模式插图(15)

3.工作原理

适配器模式和装饰器模式插图(16)

2.类适配器

1.基本介绍

适配器模式和装饰器模式插图(17)

2.类图

适配器模式和装饰器模式插图(18)

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的电压适配到220V
    public 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{
    @Override
    public int output5V() {
        // 将220V的电压适配到5V
        int 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.结果

适配器模式和装饰器模式插图(19)

4.类适配器的注意事项

适配器模式和装饰器模式插图(20)

3.对象适配器

1.基本介绍

适配器模式和装饰器模式插图(21)

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

适配器模式和装饰器模式插图(22)

2.介绍

适配器模式和装饰器模式插图(23)

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;
    }

    @Override
    public int output5V() {
        // 将220V的电压适配到5V
        int 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.基本介绍

适配器模式和装饰器模式插图(24)

2.类图

适配器模式和装饰器模式插图(25)

3.目录结构

适配器模式和装饰器模式插图(26)

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{
    @Override
    public void m4() {

    }

    @Override
    public void m3() {

    }

    @Override
    public void m2() {

    }

    @Override
    public 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() {
            @Override
            public void m1() {
                System.out.println("重写了m1方法");
            }
        };
        absAdapter.m1();
    }
}
4.结果

适配器模式和装饰器模式插图(27)

本站无任何商业行为
个人在线分享 » 适配器模式和装饰器模式
E-->