java策略模式 动态_java策略模式

什么是策略模式?

官方曰:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换,让算法独立于使用它的客户而独立变化;

俗话曰:策略模式定义了一系列具有共同特征对象的某些行为(方法/函数),广义上来看,每个方法都是完成相同的工作,实际上每个方法执行的细节不一样,也就是具体实现不同,比方说:人吃饭这个行为,中国人用筷子和碗吃饭,而美国人用的是叉子和盘子吃饭,也有用竹筒盛饭吃的。。。。。。大家都是实现吃饭这个行为;而软件系统中为了减少具有共同特征和行为的对象之间的耦合度,实现对外统一对象的特征(方法),还是拿吃饭来说(本人好吃^_^,见谅):对外统一暴露吃饭方法,具体谁吃(也可以理解成中国人方式吃、还是美国人方式吃),那就是策略模式的核心所在,这个时候就需要策略管理器去动态调用具体方法实现了;就不说太多废话了,看例子:

流程图:

6a731c3a62b1dcfd5d35a97a5f82a11f.png

JAVA_CODE例子:

/*** 人类

* 对外统一入口

*@authorAdministrator

**/

public interfacePerson {//吃饭

public voideat();

}

/*** 鬼子

*@authorAdministrator*/@Componentpublic class JapanPerson implementsPerson {

@Overridepublic voideat() {

System.out.println("米西米西");

}

}

/*** 中国人

*@authorAdministrator

**/@Componentpublic class ChinesePerson implementsPerson {

@Overridepublic voideat() {

System.out.println("中国人在吃饭!");

}

}

/*** 米国人

*@authorAdministrator*/@Componentpublic class AmericanPerson implementsPerson {

@Overridepublic voideat() {

System.out.println("米国人在吃饭!");

}

}

/*** 人类策略管理器

*@authorAdministrator

**/@Componentpublic classPersonContext {/***使用线程安全的ConcurrentHashMap存储所有实现Person接口的Bean

*key:beanName

*value:实现Person接口Bean*/

private final Map personMap = new ConcurrentHashMap<>();/*** 注入所有实现Person的bean,全部存放personMap中,以实现动态调用

*@parampersonMap*/@Autowiredpublic PersonContext(MappersonMap) {this.personMap.clear();this.personMap.putAll(personMap);

}//行为方法

public voiddoEat(String value) {if(!StringUtils.isEmpty(value)){

personMap.get(value).eat();

}

}

}

@Controllerpublic classPersonController {

@AutowiredprivatePersonContext personContext;

@RequestMapping("eat")public @ResponseBody voideat(String value) {

personContext.doEat(value);

}

}

这样就可以实现动态调用,例如启动tomcat后访问: http://127.0.0.1:8080/item/eat?value=chiniesePerson就是调用中国人的吃饭行为;

总结: 策略模式有效的解决了具有共同行为的对象之间的耦合,这样才符合"对修改关闭,扩展开放"原则;

以下图是本人项目的具体应用场景,各位可以参考

-----------------------------------------------------------------------------------

55a86c501c2b596c105f30e23f9a0532.png

本文仅供学习,如有不对地方,请留言指教!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值