本文主要是介绍实现具有多个实现类的接口并为每个实现类定义一个名字的方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在Java中,实现具有多个实现类的接口并为每个实现类定义一个名字的方法,可以通过使用工厂模式或服务定位器模式来完成。以下是使用工厂模式的一个示例:
定义接口和实现类
首先,定义一个接口和多个实现类:
// 接口
public interface ServiceInterface {void serve();
}// 实现类1
public class ServiceImpl1 implements ServiceInterface {@Overridepublic void serve() {System.out.println("Serve method of ServiceImpl1");}
}// 实现类2
public class ServiceImpl2 implements ServiceInterface {@Overridepublic void serve() {System.out.println("Serve method of ServiceImpl2");}
}
创建工厂类
然后,创建一个工厂类来根据给定的名字实例化相应的实现类:
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);}}
}
使用工厂类:
public class Main {public static void main(String[] args) {// 获取实现类实例ServiceInterface service1 = ServiceFactory.getService("Impl1");service1.serve(); // 输出: Serve method of ServiceImpl1ServiceInterface service2 = ServiceFactory.getService("Impl2");service2.serve(); // 输出: Serve method of ServiceImpl2}
}
方法二:
注册机制。可以定义一个hashmap,每个实现类注册自身到工厂,这里要用到spring的initializingBean:
工厂类:
public class ClusterFactory {// 处理类Mapprivate 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);}
}
实现类:
//一个实现类
@Service
@Slf4j
public class CloudClusterHandler extends ClusterHandler {@Overridepublic void afterPropertiesSet() {ClusterFactory.register(ClusterTypeEnum.CLOUD.getName(), this);}
}
这篇关于实现具有多个实现类的接口并为每个实现类定义一个名字的方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!