设计模式利剑12-策略模式

时间:2022-02-21 00:38:44

定      义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换

优      点:

              1、算法可以*切换

              2、避免使用多重条件判断

              3、扩展性好

缺      点:

              1、策略类数量多

              2、所有的策略类都需要对外暴露

使用场景:

              1、多个类只有在算法或行为上稍有不同的场景

              2、算法需要*切换的场景

              3、需要屏蔽算法规则的场景

应用案例:

            先来看看策略模式的UML图:

设计模式利剑12-策略模式               1、Context封装角色:起承上启下的作用,屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化

               2、Strategy抽象策略角色:策略、算法家族的抽象,通常为借口,定义每个策略或uanfa必须具有的方法和属性

              先来看一个历史故事吧,著名的东吴赔了夫人又折兵的故事,诸葛亮给了赵云三条妙计藏于锦囊中,用来应对东吴为难刘备之事,这个是一个典型的策略模式,现在来看一看UML图:

设计模式利剑12-策略模式              我是一个多子女家庭,让我想起了我小时候上学,我觉得也可以封装成策略模式,妈妈起床给各个孩子准备好衣服、书包和早餐,孩子起床后,要问妈妈我的衣服书包和早餐在那里,妈妈告诉我们,我们便知道了一天要开始做什么了,用UML图实现如下:

设计模式利剑12-策略模式

 

经过如此设计以后,那孩子们再也不用操心因为学前事务而迟到了,他们都依赖于他们的妈妈了,妈妈就是将一组算法封装起来,给孩子们更方便的接口。