HashMap的使用,Service映射

简介: HashMap的使用,Service映射

一 前言

  说到map,其实很多人都是很头疼的,因为相比于List,Map的可读性更低,因此,在开发中我以前还是比较多的使用List,但是其实Map还是有非常多的好处的,现在就介绍一种Map非常实用的处理方式

## 二 场景

  你付款时,有两种付款方式,支付宝和微信支付。针对这两种支付方式会有不同的逻辑处理,这时候你可能会对两种支付方式建立不同的两个类,然后更具传入的类型判断使用哪种支付方式。

boolean isZFB =true;
boolean isWX =true;
if(isZFB){
    //调用支付宝实现
}
if(isWX){
    //调用微信实现
}

这样会有一个问题,随着支付方式的增多,if就会越来越多,最后很容易成为面条代码。这时候map可以解决这个问题。

## 三 应用
首先我们建立一个抽象的接口(这里面就使用正常的实战例子)

 public interface IEdiSender {}
 

建立接口的实现类

 public class Csm001ShipEdiService implements IEdiSender{
    public static final String EDI_TYPE = "CSM001";
    @Override
    public String getEdiType() {
        return EDI_TYPE;
    }
}

public class Csm002ShipEdiService implements IEdiSender{
    public static final String EDI_TYPE = "CSM002";
    @Override
    public String getEdiType() {
        return EDI_TYPE;
    }
}

然后在Spring初始化的时候将类型码与实现的实例进行一个映射

@Service
public class EdiSenderProvider implements ApplicationContextAware {

    private Map<String, IEdiSender> iEdiSenderMap;

    public IEdiSender getEdiSenderByType(String ediType) {
        return iEdiSenderMap.get(ediType);
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        Map<String, IEdiSender> beansOfType = applicationContext.getBeansOfType(IEdiSender.class);
        iEdiSenderMap = new HashMap<String, IEdiSender>();
        for (IEdiSender iEdiSender : beansOfType.values()) {
            iEdiSenderMap.put(iEdiSender.getEdiType(), iEdiSender);
        }

    }



}

然后调用时直接通过类型获取实例就可以了,非常使用,其实这个和Beanfactory的Map是一样的效用。

相关文章
|
6月前
|
Kubernetes 负载均衡 算法
【K8S系列】深入解析Service
【K8S系列】深入解析Service
81 0
【K8S系列】深入解析Service
|
1月前
|
存储 JSON C++
【C++】容器篇(五)—— map和set的基本介绍
【C++】容器篇(五)—— map和set的基本介绍
|
4月前
|
Kubernetes 监控 Cloud Native
k8s 自身原理之 Service
k8s 自身原理之 Service
|
6月前
|
存储 C++ 容器
【C++】关联式容器——map&set的使用(下)
【C++】关联式容器——map&set的使用(下)
|
6月前
|
存储 自然语言处理 C++
【C++】关联式容器——map&set的使用(上)
【C++】关联式容器——map&set的使用(上)
|
6月前
|
算法 C++ 容器
【C++】关联式容器——map&set的使用(中)
【C++】关联式容器——map&set的使用(中)
|
11月前
|
存储 负载均衡 Kubernetes
简单说说K8S的Service底层,总感觉还是说不清楚。
简单说说K8S的Service底层,总感觉还是说不清楚。
147 0
|
存储 程序员 C++
C++:map和set的认识和简单使用/关联式容器
简单地介绍了set和map,目的是能够懂得如何去使用map和set
C++:map和set的认识和简单使用/关联式容器
|
监控 安全 Serverless
AAS即As-a-Service的概念
列举一些接触到的AAS即As-a-Service的概念
341 0