使用 Java SpringBoot 开发工厂方法。
微信搜索关注《Java学研大本营》,加入读者群,分享更多精彩
我的目的是为那些需要根据通过 url 接收的参数更改实现的人快速显示一条路径。
快速概念
工厂方法模式封装了对象的创建,因此创建哪个对象的决定由子类做出。
开始
public interface DecidesByGenderStrategy {
public void registerFrom(Genders gender);
public GenderNames getStrategyName();
}
我创建了上面的接口来抽象将要使用的方法,但这不是强制性的,您可以采用其他方式。
@Component
public class DecidesByGenderStrategyFactory{
private EnumMap<GenderNames, DecidesByGenderStrategy> strategies;
public DecidesByGenderStrategyFactory(Set<DecidesByGenderStrategy> strategySet){
this.createStrategy(strategySet);
}
private void createStrategy (Set<DecidesByGenderStrategy> strategySet) {
strategies = new EnumMap<>(GenderNames.class);
strategySet.forEach(strategy -> strategies.put(strategy.getStrategyName(), strategy));
}
public DecidesByGenderStrategy findStrategyByGender(Genders genderRecieved){
GenderNames genderToUse;
switch (genderReceived){
case 'M' -> type = GenderNames.MALE;
case 'F' -> type = GenderNames.FEMALE;
case 'A','B','C' -> type = GenderNames.ABC
default -> throw new BusinessException("Invalid type");
}
return this.findStrategy(genderToUse);
}
public DecidesByGenderStrategy findStrategy(GenderNames genderName){
return strategies.get(genderName);
}
}
上面我们有Factory,参数strategies是一个map,所以,DecidesByGenderStrategyFactory是调用方法createStrategy的构造函数,它接收可能的名称来区分实现中要使用的策略。
然后findStrategyByGender方法获取性别并找到名称来决定使用哪种策略。
策略是要创建的“对象”,在这种情况下是要开发的规则/逻辑。
public class ConfirmMaleGenderStrategy implements DecidesByGenderStrategy{
@Override
public void registerFrom(Genders gender) {
// logic to register as from gender
}
@Override
public GenderNames getStrategyName(){
return GenderNames.MALE;
}
}
上面,实现根据传递的参数选择的接口的类,在这种情况下,将在接收到的参数为male时执行。
就是这样,最后你可以在你的服务层中注入类,调用findStrategyByGender并传递在 url 中收到的性别。
return this.decidesByGenderStrategyFactory.findStrategyByGender(genderReceivedFromUrl).registerFrom(objectReceivedFromUrl);
感谢您阅读!
推荐书单
《项目驱动零起点学Java》
《项目驱动零起点学Java》共分 13 章,围绕 6 个项目和 258 个代码示例,分别介绍了走进Java 的世界、变量与数据类型、运算符、流程控制、方法、数组、面向对象、异常、常用类、集合、I/O流、多线程、网络编程相关内容。《项目驱动零起点学Java》总结了马士兵老师从事Java培训十余年来经受了市场检验的教研成果,通过6 个项目以及每章的示例和习题,可以帮助读者快速掌握Java 编程的语法以及算法实现。扫描每章提供的二维码可观看相应章节内容的视频讲解。
《项目驱动零起点学Java》贯穿6个完整项目,经过作者多年教学经验提炼而得,项目从小到大、从短到长,可以让读者在练习项目的过程中,快速掌握一系列知识点。
马士兵,马士兵教育创始人,毕业于清华大学,著名IT讲师,所讲课程广受欢迎,学生遍布全球大厂,擅长用简单的语言讲授复杂的问题,擅长项目驱动知识的综合学习。马士兵教育获得在线教育“名课堂”奖、“最受欢迎机构”奖。
赵珊珊,从事多年一线开发,曾为国税、地税税务系统工作。拥有7年一线教学经验,多年线上、线下教育的积累沉淀,培养学员数万名,讲解细致,脉络清晰。
精彩回顾
微信搜索关注《Java学研大本营》
访问【IT今日热榜】,发现每日技术热点