无废话C#设计模式之十五:Strategy
2009-04-02 08:23:16 来源:WEB开发网核心提示: 代码执行结果如下图:代码说明l Data类就是环境或者说上下文角色,持有对策略角色的引用,无废话C#设计模式之十五:Strategy(2),在这里,我们通过一个方法来设置环境使用的策略,前者会带来不必要的通讯开销,后者会使环境和策略角色发生紧密耦合,你也可以根据需求在构造方法中传入具体策略
代码执行结果如下图:
代码说明
l Data类就是环境或者说上下文角色,持有对策略角色的引用。在这里,我们通过一个方法来设置环境使用的策略,你也可以根据需求在构造方法中传入具体策略对象。
l ShowDataStrategy抽象类就是抽象策略角色,它定义了策略共有的接口。
l ShowAllData、ShowPagedData以及SearchData类都是具体策略角色,它们实现真正的算法或行为。
l 客户端在调用的时候才决定去使用哪种策略模式。
l 可以看到,由于显示数据由各个具体策略类来实现,使得环境角色的复杂度降低了很多。并且如果以后还需要增加新的显示数据方式的话只需要增加新的具体策略类(实现抽象策略接口)就可以了,环境类的代码不需要做改动。对于各具体策略实现过程中可复用的部分也可以放在抽象策略类中实现。
何时采用
l 从代码角度来说, 如果一个类有多种行为,并且在类内部通过条件语句来实现不同的行为的时候可以把这些行为单独封装为策略类。
l 从应用角度来说,如果系统需要选择多种算法中的一种并且希望通过统一的接口来获取算法的输出的话可以考虑策略模式。
实现要点
l 在环境角色中拥有策略角色的实例。
l 如果策略角色需要使用环境中的数据,一般可以让环境把数据传给所有策略角色,或者可以让环境把自身传给策略角色,前者会带来不必要的通讯开销,后者会使环境和策略角色发生紧密耦合。根据需要选择合适的方式。
更多精彩
赞助商链接