适配器模式

1,适配器模式结构模型

我们都知道,电脑是不能直接读取手机内存卡的,这时候我们需要一个能兼容手机内存卡还能对接电脑的工具,就是读卡器,这里的读卡器就是适配器;

Java中适配器模式就是将一个类的接口转换成我们希望的另一个接口

适配器结构图

代码示例

加密的接口

package org.ph.adapter;

/**
 * <p>
 *
 * </p>
 *
 * @author lph
 * @package org.ph.adapter
 * @project juc-api
 * @since 2022 -02 -28 21:35
 */
public interface EncryptAlgorithm {
    /**
     * 加密方法
     *
     * @param content 要加密的内容
     */
    void encrypt(String content);
}

MD5实现

package org.ph.adapter;

/**
 * <p>
 *
 * </p>
 *
 * @author lph
 * @package org.ph.adapter
 * @project juc-api
 * @since 2022 -02 -28 21:35
 */
public class MD5lgorithm implements EncryptAlgorithm {
    @Override
    public void encrypt(String content) {
        System.out.println("内容:" + content + "已被MD5加密算法加密");
    }
}

SCA实现

package org.ph.adapter;

/**
 * <p>
 *
 * </p>
 *
 * @author lph
 * @package org.ph.adapter
 * @project juc-api
 * @since 2022 -02 -28 21:35
 */
public class SCAAlgorithm implements EncryptAlgorithm {
    @Override
    public void encrypt(String content) {
        System.out.println("内容:" + content + "已被SCA加密算法加密");
    }
}

判断输入的参数或调用是否支持

package org.ph.adapter;

/**
 * <p>
 *
 * </p>
 *
 * @author lph
 * @package org.ph.adapter
 * @project juc-api
 * @since 2022 -02 -28 21:42
 */
public class Adapter {

    /**
     * 判断输入的参数或调用是否支持
     *
     * @param algorithmImpl 具体的实现算法
     * @return
     */
    public boolean isSupport(Object algorithmImpl) {
        return algorithmImpl instanceof EncryptAlgorithm;
    }

    public void process(Object algorithmImpl, String content) {
        ((EncryptAlgorithm) algorithmImpl).encrypt(content);
    }
}

输入算法的匹配工厂

package org.ph.adapter;

/**
 * <p>
 *
 * </p>
 *
 * @author lph
 * @package org.ph.adapter
 * @project juc-api
 * @since 2022 -02 -28 21:48
 */
public class AlgorithmSimpleFactory {

    public Object createSpecifAlgorithm(String algorithm) {
        switch (algorithm) {
            case "SCA":
                return new SCAAlgorithm();
            case "MD5":
                return new MD5lgorithm();
            default:
                return null;
        }
    }
}

Main测试

package org.ph.adapter;

import java.util.Scanner;

/**
 * <p>
 *
 * </p>
 *
 * @author lph
 * @package org.ph.adapter
 * @project juc-api
 * @since 2022 -02 -28 21:45
 */
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while (true) {
            System.out.println("请输入你要使用的加密算法:");
            String algorithmName = scanner.nextLine();
            System.out.println("请输入要加密的密文:");
            String content = scanner.nextLine();

            Object specifAlgorithm = new AlgorithmSimpleFactory().createSpecifAlgorithm(algorithmName);
            Adapter adapter = new Adapter();

            if (adapter.isSupport(specifAlgorithm)) {
                adapter.process(specifAlgorithm, content);
            } else {
                System.out.println("你的算法【" + algorithmName + "】不支持");
            }
        }

    }
}