我是「猿码天地」,一个热爱技术、热爱编程的IT猿。技术是开源的,知识是共享的!
写作是对自己学习的总结和记录,如果您对 Java、分布式、微服务、中间件、Spring Boot、Spring Cloud等技术感兴趣,可以关注我的动态,我们一起学习,一起成长!
用知识改变命运,让家人过上更好的生活,互联网人一家亲!
——公众号《猿码天地》
设计模式
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
必须清楚应用设计模式目的
1、易扩展,易维护
2、少改代码,不改代码
策略模式核心思想
策略模式的核心思想是在一个计算方法中把容易变化的算法抽出来作为“策略”参数传进去,从而使得新增策略不必修改原有逻辑。
即:创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。
实现步骤
1、不同策略实现同一个接口,即定义一个策略接口。
2、不同策略定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
3、定义实现策略的策略上下文。
实例讲解
源码获取方式:由于实战源码较多,如需获取源码,请关注公众号"猿码天地",回复“设计模式”即可获取源码。
example1 应用于商场打折场景
假设网站针对普通会员、Prime会员有不同的折扣,同时活动期间还有一个满100减20的活动,这些就可以作为策略实现。
1、先定义打折策略接口:DiscountStrategy接口
2、实现各种策略
普通用户策略:UserDiscountStrategy类
满减策略:OverDiscountStrategy类
Prime会员策略:PrimeDiscountStrategy类
3、新建一个策略上下文:DiscountContext类
4、新建测试类:Test类
调用方必须首先创建一个DiscountContext,并指定一个策略(或者使用默认策略),即可获得折扣后的价格。
example2 应用于支付宝和京东支付场景
假设第三方支付平台需要对接支付宝、京东支付,怎样使用策略模式进行支付呢?
1、先定义支付策略接口:Payment接口
2、实现支付宝和京东各自的支付策略
阿里支付策略:AliPayment类
京东支付策略:JDPayment类
3、定义支付策略上下文:PayContext类
4、新建测试Test类,创建一个策略上下文对象,调用各自支付策略。
优点和缺点
优点:
1、算法可以自由切换。
2、避免使用多重条件判断。
3、扩展性良好。
缺点:
1、策略类会增多。
2、所有策略类都需要对外暴露。
使用总结
1、策略模式是为了允许调用方选择一个算法,从而通过不同策略实现不同的计算结果。
2、通过扩展策略,不必修改主逻辑,即可获得新策略的结果。
扫描二维码关注公众号 : 猿码天地
你多学一样本事,就少说一句求人的话,现在的努力,是为了以后的不求别人,实力是最强的底气。记住,活着不是靠泪水博得同情,而是靠汗水赢得掌声。
——《写给程序员朋友》