设计模式-策略模式

   代码写作过程中,设计模式是对某些固定场景代码写作的总结和优化,最常见的设计模式,除了单例模式外,还有工厂模式和策略模式。

  工厂模式是一种创建型模式,他的作用是创建对象,策略模式是一种行为型模式,他的作用是选择行为。一个关注对象创建,一个关注行为封装。

  策略模式主要解决代码中繁杂的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判断语法,也有利于扩展或删除某一实现类,是一种让这种场景下代码简洁,符合开闭思想的好方法。

posted on 2022-12-13 09:43  xue123  阅读(43)  评论(0编辑  收藏  举报