策略模式:定义了算法族(将一组行为想象成一族算法),分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的额对象管理。策略模式通常把一系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。也就是说,准备一组算法并将每一个算法封装起来,使得它们可以互相互换。看下面的结构框图:
我们由框图得到三个角色: (1)环境角色(context):持有一个Strategy的引用; (2)抽象策略模式(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。 (3)具体策略角色(ConcreteStrategy):包装了相关的算法或行为。
从上面的实例中,策略模式仅仅是封装算法,提供新的算法插入到已有的系统中,以及以前的算法从系统中淘汰的方法,策略模式并不决定何时使用某种算法,在什么情况下使用算法是由客户端决定的。
(1)策略模式保证了各个策略算法的平等性,对于一系列的具体实现,大家的地位是平等的,实现各个具体算法实现之间的相互切换,而它们彼此之间是没有依赖的可以理解为是相同行为的不同实现; (2)运行期间,策略模式在同一个时刻只能使用一个具体的策略实现; (3)所有的具体策略类都有一些公有的行为。此时就应该把这些公有的行为放到共同的抽象策略角色Strategy中。
文章只是作为自己的学习笔记,借鉴了网上的许多案例,如果觉得阔以的话,希望多交流,在此谢过…
新闻热点
疑难解答