当前位置: 首页 > news >正文

java策略模式三种实现方案

方案1:@Autowired Map

public interface ClientService {void hanlde(Object obj);String type();
}
@Service
public class PcClientService implements ClientService  {    @Overridepublic void handle(Object obj) {// todo pc客户端逻辑}    @Overridepublic String type() {// 使用时根据type匹配对应实现类,可以使用枚举或常量代替return "pcClientService ";}
}
@Service
public class AndroidClientService implements ClientService  {    @Overridepublic void handle(Object obj) {// todo Android客户端逻辑}    @Overridepublic String type() {// 使用时根据type匹配对应实现类(对应beanname),可以使用枚举或常量代替return "androidClientService ";}
}
    @Autowiredprivate Map<String, ClientService> clientHandlers;// 策略调用public void strategy(String strategyType) {clientHandlers.get(strategyType).handle();}

方案2: @PostConstruct

public interface ClientService {void hanlde(Object obj);
}
public class ClientManager {private static final Map<String, ClientService> clientHandlers = new ConcurrentHashMap<>();public static void register(String type, ClientService service) {clientHandlers.put(type, service);}
}

@Component
public class PcClientServiceImpl implements ClientService{@PostConstructpublic void afterInit() {// 不需要 type() 方法了// 但我们仍需要在注册策略时提供 type 参数ClientManager.register("pcClientServiceImpl ", this);}// 使用方式同上
}

方案三:InitializingBean
相比第二种@PostConstruct增加了约束力,避免忘记实现@PostConstruct方法

public interface ClientService extends InitializingBean {void hanlde(Object obj);
}
public class PcClientServiceImpl implements ClientService {@Overridepublic void hanlde(Object obj) {// todo 业务逻辑}@Overridepublic void afterPropertiesSet() throws Exception {    ClientManager.register("pcClientServiceImpl ", this);}
}

使用时就根据不同type,调用不同策略算法

http://www.lryc.cn/news/106962.html

相关文章:

  • VMWare虚拟系统上网设置及VMWare虚拟机三种工作模式详解
  • 计算机网络(3) --- 网络套接字TCP
  • 大数据技术之Hadoop(二)
  • 运维工程师第二阶段linux基础
  • ChatGPT安全技术
  • 使用cmd查看3568主板相关
  • SpringBoot限制(限流)接口访问频率
  • 蓝桥杯,我劝你不要参加的8个完美理由
  • ChatGPT及其工作原理;OpenAI申请注册商标GPT-5,引发关注
  • [C++项目] Boost文档 站内搜索引擎(2): 文档文本解析模块parser的实现、如何对文档文件去标签、如何获取文档标题...
  • 若依框架vue使用Element 如何把当前页面的所有Table表格row.id和一个表单的16个字段内容通过js传Java后台,Java后台是如何接收的
  • 迁移学习:使用Restnet预训练模型构建高效的水果识别模型
  • 浅谈机器视觉
  • 助力保险行业数字化创新,麒麟信安参展2023中国财险科技应用高峰论坛
  • eclipse was unable to locate its companion shared library
  • 【MySQL】使用C/C++连接MySQL数据库
  • 【Python】从同步到异步多核:测试桩性能优化,加速应用的开发和验证
  • 使用checkBox组件时,动态设置disabled,仍能触发click事件的原因及解决办法
  • 【JavaScript】如何进行除法运算且保留小数部分不参与四舍五入【推荐库bignumber.js 】
  • 掌握Java JDK 1.8 API帮助文档中文版,事半功倍编程
  • Spring Boot的自动配置原理
  • NFS服务器
  • 说明学习委员之作业管理系统—后端部分
  • 质数(判定质数 分解质因数 筛质数)
  • SAP数据库表维护视图生成器的使用
  • 数据结构 | 递归
  • 微信发视频怎么不压缩画质?试试这几招
  • 【网络安全带你练爬虫-100练】第16练:使用session发送请求
  • 论文代码学习—HiFi-GAN(3)——模型损失函数loss解析
  • CLion中avcodec_receive_frame()问题