设计模式-策略模式
代码写作过程中,设计模式是对某些固定场景代码写作的总结和优化,最常见的设计模式,除了单例模式外,还有工厂模式和策略模式。
工厂模式是一种创建型模式,他的作用是创建对象,策略模式是一种行为型模式,他的作用是选择行为。一个关注对象创建,一个关注行为封装。
策略模式主要解决代码中繁杂的if-else的语句的一种设计方案。使代码更简洁,便于维护。
策略模式的优点
1、降低了多重条件语句伴随的维护难度高的问题
2、恰当的使用了继承,减少了冗余代码
3、贴合开闭原则,保证尽可能少对原代码更改的前提新增了功能
策略模式的缺点
随着策略的不断增多会导致策略类数量庞大(可通过混合模式解决)
策略模式的实现:
i 定义行为接口
ii 行为接口的多个实现类
1 支付宝支付
2 微信支付
3银行卡支付
iii 一个策略上下文类,用来构造接受具体实现类,提供统一入口
这样就实现了一个完整的策略模式,如果不用这个模式,就要用繁杂的if-else,策略模式的风格更接近与开闭原则,扩展方便,插拔也方便。
测试代码:
Iv 策略模式在源码中的应用
1 比较器Comparator
在Java的集合框架中,经常需要通过构造方法传入一个比较器Comparator,或者创建比较器传入Collections的静态方法中作为方法参数,进行比较排序等,使用的是策略模式。
在该比较架构中,Comparator就是一个抽象的策略;一个类实现该结构,并实现里面的compare方法,该类成为具体策略类;Collections类就是环境角色,他将集合的比较封装成静态方法对外提供api。
2 ThreadPoolExecutor中的四种拒绝策略
在创建线程池时,需要传入拒绝策略,当创建新线程使当前运行的线程数超过maximumPoolSize时,将会使用传入的拒绝策略进行处理。 - AbortPolicy:直接抛出异常。 - CallerRunsPolicy:只用调用者所在线程来运行任务。 - DiscardOldestPolicy:丢弃队列里最近的一个任务,并执行当前任务。 - DiscardPolicy:不处理,丢弃掉。
这里使用的就是策略模式。
总结:
策略模式是一种对同一方法多种实现行为的封装,有利于调用方的统一调用,避免了代码中冗繁的if-else判断语法,也有利于扩展或删除某一实现类,是一种让这种场景下代码简洁,符合开闭思想的好方法。