策略+适配器模式详解

文章目录

    • 1.策略模式
        • 1.目录结构
        • [2.Strategy.java 策略接口](#2.Strategy.java 策略接口)
        • [3.StrategyA.java 策略A](#3.StrategyA.java 策略A)
        • [4.StrategyB.java 策略B](#4.StrategyB.java 策略B)
        • [5.StrategyC.java 策略C](#5.StrategyC.java 策略C)
        • [6.Context.java 策略上下文](#6.Context.java 策略上下文)
        • [7.Client.java 客户端](#7.Client.java 客户端)
        • 8.小结
    • 2.适配器模式
        • 1.目录结构
        • [2.CustomPaymentProcessor.java 自己的支付接口](#2.CustomPaymentProcessor.java 自己的支付接口)
        • [3.PayPalPaymentService.java 第三方的支付服务](#3.PayPalPaymentService.java 第三方的支付服务)
        • [4.PayPalPaymentAdapter.java 第三方适配器](#4.PayPalPaymentAdapter.java 第三方适配器)
        • [5.Client.java 客户端](#5.Client.java 客户端)
        • 6.小结

1.策略模式

1.目录结构
2.Strategy.java 策略接口
java 复制代码
package com.sunxiansheng.design_pattern.strategy;

/**
 * Description: 策略接口
 *
 * @Author sun
 * @Create 2025/2/7 12:17
 * @Version 1.0
 */
public interface Strategy {

    /**
     * 算法接口
     */
    void algorithmInterface();
}
3.StrategyA.java 策略A
java 复制代码
package com.sunxiansheng.design_pattern.strategy;

/**
 * Description: 策略A
 *
 * @Author sun
 * @Create 2024/8/12 20:05
 * @Version 1.0
 */
public class StrategyA implements Strategy{
    @Override
    public void algorithmInterface() {
        System.out.println("策略A");
    }
}
4.StrategyB.java 策略B
java 复制代码
package com.sunxiansheng.design_pattern.strategy;

/**
 * Description: 策略B
 *
 * @Author sun
 * @Create 2024/8/12 20:05
 * @Version 1.0
 */
public class StrategyB implements Strategy{
    @Override
    public void algorithmInterface() {
        System.out.println("策略B");
    }
}
5.StrategyC.java 策略C
java 复制代码
package com.sunxiansheng.design_pattern.strategy;

/**
 * Description: 策略C
 *
 * @Author sun
 * @Create 2024/8/12 20:05
 * @Version 1.0
 */
public class StrategyC implements Strategy{
    @Override
    public void algorithmInterface() {
        System.out.println("策略C");
    }
}
6.Context.java 策略上下文
java 复制代码
package com.sunxiansheng.design_pattern.strategy;

/**
 * Description: 策略上下文,根据不同的策略执行不同的算法
 *
 * @Author sun
 * @Create 2025/2/7 12:17
 * @Version 1.0
 */
public class Context {

    /**
     * 策略的属性
     */
    private Strategy strategy;

    /**
     * 在创建对象的时候就指定不同的策略
     * @param type
     */
    public Context(int type) {
        switch (type) {
            case 1:
                strategy = new StrategyA();
                break;
            case 2:
                strategy = new StrategyB();
                break;
            case 3:
                strategy = new StrategyC();
                break;
            default:
                break;
        }
    }

    /**
     * 调用具体的算法
     */
    public void contextInterface() {
        strategy.algorithmInterface();
    }
}
7.Client.java 客户端
java 复制代码
package com.sunxiansheng.design_pattern.strategy;

/**
 * Description: 客户端
 *
 * @Author sun
 * @Create 2025/2/7 12:19
 * @Version 1.0
 */
public class Client {

    public static void main(String[] args) {
        // 策略工厂中定义具体的策略
        Context context = new Context(1);
        // 调用方法时,就会指定具体的策略
        context.contextInterface();
    }
}
8.小结

策略模式,首先要定义一个策略接口,然后每个具体的策略都要去实现这个策略接口,接下来就要有一个上下文,这个上下文可以根据不同的类型来设置不同的策略。

2.适配器模式

1.目录结构
2.CustomPaymentProcessor.java 自己的支付接口
java 复制代码
package com.sunxiansheng.design_pattern.adapter;

/**
 * Description: 自定义的支付接口
 *
 * @Author sun
 * @Create 2025/2/9 11:05
 * @Version 1.0
 */
public interface CustomPaymentProcessor {

    void processPayment(double amount);
}
3.PayPalPaymentService.java 第三方的支付服务
java 复制代码
package com.sunxiansheng.design_pattern.adapter;

/**
 * Description: 第三方支付服务(需要适配的接口)
 *
 * @Author sun
 * @Create 2025/2/9 11:06
 * @Version 1.0
 */
public class PayPalPaymentService {

    public void makePayment(double amountInDollars) {
        System.out.println("Payment made using PayPal: $" + amountInDollars);
    }
}
4.PayPalPaymentAdapter.java 第三方适配器
java 复制代码
package com.sunxiansheng.design_pattern.adapter;

/**
 * Description: 适配器类,用来将第三方的PayPal支付接口适配到系统自定义的支付接口上
 *
 * @Author sun
 * @Create 2025/2/9 11:07
 * @Version 1.0
 */
public class PayPalPaymentAdapter implements CustomPaymentProcessor {

    /**
     * 注入第三方接口
     */
    private PayPalPaymentService payPalPaymentService;

    public PayPalPaymentAdapter(PayPalPaymentService payPalPaymentService) {
        this.payPalPaymentService = payPalPaymentService;
    }

    /**
     * 将第三方接口适配,使其满足自己接口的要求
     *
     * @param amount
     */
    @Override
    public void processPayment(double amount) {
        System.out.println("适配过的接口");
        payPalPaymentService.makePayment(amount);
    }
}
5.Client.java 客户端
java 复制代码
package com.sunxiansheng.design_pattern.adapter;

/**
 * Description: 客户端
 *
 * @Author sun
 * @Create 2025/2/9 11:08
 * @Version 1.0
 */
public class Client {

    public static void main(String[] args) {
        // 第三方的支付Service
        PayPalPaymentService payPalPaymentService = new PayPalPaymentService();
        // 自己的适配器聚合第三方支付
        PayPalPaymentAdapter payPalPaymentAdapter = new PayPalPaymentAdapter(payPalPaymentService);
        // 使用适配器调用方法
        payPalPaymentAdapter.processPayment(100.0);
    }
}
6.小结

适配器模式其实就是自己有一个接口,然后第三方有一个服务,就需要一个适配器,这个适配器就需要实现自己的接口,然后聚合第三方的接口,来完成自己接口的对应功能。

相关推荐
L***d670几秒前
Spring Boot 经典九设计模式全览
java·spring boot·设计模式
枫叶丹4几秒前
浙人医信创实践:电科金仓异构多活架构破解集团化医院转型难题
开发语言·数据库·架构
我命由我12345几秒前
Android 开发问题:布局文件中的文本,在预览时有显示出来,但是,在应用中没有显示出来
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
小李小李快乐不已1 分钟前
图论理论基础(2)
java·开发语言·c++·算法·图论
Sheffi662 分钟前
Objective-C 黑魔法:Method Swizzling 的正确姿势与滥用风险
开发语言·macos·objective-c
7***q6082 分钟前
【保姆级教程】apache-tomcat的安装配置教程
java·tomcat·apache
shayudiandian6 分钟前
【Java】枚举类
java
AI_56787 分钟前
MES+物联网传感器重塑设备管理体系
开发语言·php
骇客野人8 分钟前
JAVA日常开发技术点总结
java·开发语言
o***741710 分钟前
新手如何快速搭建一个Springboot项目
java·spring boot·后端