设计模式之策略模式
来源:互联网 发布:安卓网络嗅探器怎么用 编辑:程序博客网 时间:2024/04/30 01:15
设计模式目录
http://blog.csdn.net/fenglailea/article/details/52733435
风.fox
策略模式 Strategy Pattern
定义一组算法,将每个算法都封装起来,并且使他们之间可以互换
通用类图
组成
- 封装角色 Context
也叫做上下文角色,起承上启下封装左右,屏蔽高层模块对策略
、算法的直接访问,封装可能存在的变化 - 抽象策略角色 Strategy
策略、算法家族的抽象,通常为接口,定义每个策略或算法必须具有的方法和属性 - 具体策略角色 ConcreteStrategy
实现抽象策略中的操作,该类含有具体的算法
案例
JAVA
//抽象的策略角色public interface Strategy{ //策略模式的运算法则 public void doSomething();}//具体策略角色public class ConcreteStrategy1 implements Startegy{ pulic void doSomthing(){ System.out.println("具体策略1的运算法则"); }}public class ConcreteStrategy2 implements Startegy{ pulic void doSomthing(){ System.out.println("具体策略2的运算法则"); }}// 封装角色public class Context{ //抽象策略 private Startegy startegy =null; //构造函数设置具体策略 public Context(Startegy _startegy){ this.startegy=_startegy; } //封装后的策略方法 public void doAnything(){ this.startegy.doSomthing(); }}//高层模块public class Client{ public static void main(String[] args){ //声明一个具体的策略 Startegy startegy=new ConcreteStrategy1(); //声明上下文对象 Context context=new Context(startegy); //执行封装后的方法 context.doAnything(); }}
优点
算法可以自由切换
避免使用过多重条件判断
扩展性良好
缺点
策略类数量增多
所有的策略类都需要对外暴露
使用场景
- 多个类只有在算法或行为上稍有不同的场景
- 算法需要自由切换的场景
- 需要并把算法规则的场景
0 0
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 将两个按元素值递增排序的单链表合并成一个按元素值递减的单链表
- WPF中DataGrid的简单用法
- 对链表的操作(数据结构线性表算法设计练习)
- 流程图
- 进林科大ACM的考核(3个程序设计)
- 设计模式之策略模式
- linux之一个简单的shell程序
- C语言的不足
- RecyclerView实现瀑布流布局
- Hibernate框架基础——映射普通属性
- 关于程序的边界检查
- 每天一点小姿势——异常死机怎么办(1)
- 梯度下降法 gradient descent
- effective stl 第45条:正确区分count/find/binary_search/lower_bound/upper_bound/equal_range