实现具有多个实现类的接口并为每个实现类定义一个名字的方法

在Java中,实现具有多个实现类的接口并为每个实现类定义一个名字的方法,可以通过使用工厂模式或服务定位器模式来完成。以下是使用工厂模式的一个示例:

定义接口和实现类

首先,定义一个接口和多个实现类:

java 复制代码
// 接口
public interface ServiceInterface {
    void serve();
}

// 实现类1
public class ServiceImpl1 implements ServiceInterface {
    @Override
    public void serve() {
        System.out.println("Serve method of ServiceImpl1");
    }
}

// 实现类2
public class ServiceImpl2 implements ServiceInterface {
    @Override
    public void serve() {
        System.out.println("Serve method of ServiceImpl2");
    }
}

创建工厂类

然后,创建一个工厂类来根据给定的名字实例化相应的实现类:

java 复制代码
public class ServiceFactory {

    public static ServiceInterface getService(String name) {
        switch (name) {
            case "Impl1":
                return new ServiceImpl1();
            case "Impl2":
                return new ServiceImpl2();
            default:
                throw new IllegalArgumentException("Unknown service implementation: " + name);
        }
    }
}

使用工厂类:

java 复制代码
public class Main {
    public static void main(String[] args) {
        // 获取实现类实例
        ServiceInterface service1 = ServiceFactory.getService("Impl1");
        service1.serve(); // 输出: Serve method of ServiceImpl1

        ServiceInterface service2 = ServiceFactory.getService("Impl2");
        service2.serve(); // 输出: Serve method of ServiceImpl2
    }
}

方法二:

注册机制。可以定义一个hashmap,每个实现类注册自身到工厂,这里要用到spring的initializingBean:

工厂类:

java 复制代码
public class ClusterFactory {

    // 处理类Map
    private static final Map<String, ClusterHandler> CLUSTER_FACTORY = new HashMap<>(8);

    // 获取处理类
    public static ClusterHandler get(String type) {
        return CLUSTER_FACTORY.get(type);
    }

    // 注册处理类
    public static void register(String type, ClusterHandler clusterHandler) {
        if (null == type) {
            return;
        }
        CLUSTER_FACTORY.put(type, clusterHandler);
    }
}

实现类:

java 复制代码
//一个实现类
@Service
@Slf4j
public class CloudClusterHandler extends ClusterHandler {

    

    @Override
    public void afterPropertiesSet() {
        ClusterFactory.register(ClusterTypeEnum.CLOUD.getName(), this);
    }
}
相关推荐
2301_780789669 分钟前
跨平台适配!SDK 游戏盾兼容全终端游戏场景
java·网络·ddos
第九序言T24 分钟前
Python 数据处理进阶(十八)批量处理同结构文件:一个文件夹一次跑完
开发语言·python·自动化·pandas·数据处理
学长毕设1 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
步行cgn2 小时前
FormHttpMessageConverter 详解:Spring MVC 中表单数据的读写转换器
java·spring·mvc
龙亘川2 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
金銀銅鐵2 小时前
[Java] 用 CLI 展示 EnumMap 增删键值对时的内部变化
java·源码·ai编程
程序喵大人2 小时前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
秋天的怀念_David2 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Raas1002 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
niucloud-admin3 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php