静态工厂代码实现(注解方式)

一、工厂类

public class FaqDialogueServiceFactory {
    public static Map<String, FaqDialogueService> map = new ConcurrentHashMap<>();

    public static void setMap(AnswerTypeEnum typeEnum, FaqDialogueService service){
        Assert.notNull(typeEnum);
        Assert.notNull(service);
        map.put(typeEnum.getType(), service);
    }

    public static Optional<FaqDialogueService> getFaqDialogueService(String type){
        Assert.notNull(type);
        return Optional.ofNullable(map.get(type));
    }
}

二、接口类

public interface FaqDialogueService {
    void answer(参数);
    AnswerTypeEnum getType();
}

三、继承接口的抽象类

public abstract class AbstractFaqDialogueService implements FaqDialogueService, InitializingBean {

    @Override
    public void afterPropertiesSet() throws Exception {
        FaqDialogueServiceFactory.setMap(getType(),this);
    }
}

四、实现类

import static enums.AnswerTypeEnum.RECOMMEND;

@Slf4j
@Component
public class ReadRecommendFaqDialogueServiceImpl extends AbstractFaqDialogueService {

    @Override
    public void answer(参数) {
        //具体的业务代码。
    }

    @Override
    public AnswerTypeEnum getType() {
        return RECOMMEND;
    }
}

五、工厂的应用

Optional<FaqDialogueService> optional =FaqDialogueServiceFactory.getFaqDialogueService("123");
FaqDialogueService service = optional.get();
service.answer(要传的参数);

六、经典案例代码

git地址:工厂模式案例: 工厂模式简单代码案例,仅供参考。


版权声明:本文为m0_50008952原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。