设计模式——策略模式
2015-06-16 15:24
176 查看
一、策略模式概述
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
策略模式的结构
封装类:也叫上下文,对策略进行二次封装,目的是避免高层模块对策略的直接调用。
抽象策略:通常情况下为一个接口,当各个实现类中存在着重复的逻辑时,则使用抽象类来封装这部分公共的代码,此时,策略模式看上去更像是模版方法模式。
具体策略:具体策略角色通常由一组封装了算法的类来担任,这些类之间可以根据需要自由替换。
策略模式是一种行为型模式。
二、策略模式代码示例
已排序算法为例,先定义一个策略接口
再定义两个具体算法实现上述接口
定义封装类
客户端调用
执行结果
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
策略模式的结构
封装类:也叫上下文,对策略进行二次封装,目的是避免高层模块对策略的直接调用。
抽象策略:通常情况下为一个接口,当各个实现类中存在着重复的逻辑时,则使用抽象类来封装这部分公共的代码,此时,策略模式看上去更像是模版方法模式。
具体策略:具体策略角色通常由一组封装了算法的类来担任,这些类之间可以根据需要自由替换。
策略模式是一种行为型模式。
二、策略模式代码示例
已排序算法为例,先定义一个策略接口
public interface Strategy { public void sort(); }
再定义两个具体算法实现上述接口
public class BubbleSort implements Strategy { @Override public void sort() { System.out.println("冒泡排序"); } } public class QuickSort implements Strategy { @Override public void sort() { System.out.println("快速排序"); } }
定义封装类
public class Context { private Strategy strategy; public Context(Strategy strategy) { this.strategy = strategy; } public void sort() { strategy.sort(); } }
客户端调用
public class Client { public static void main(String[] args) { Context bubble = new Context(new BubbleSort()); System.out.println("执行冒泡排序"); bubble.sort(); System.out.println("--------------"); Context quick = new Context(new QuickSort()); System.out.println("执行快速排序"); quick.sort(); System.out.println("--------------"); } }
执行结果
执行冒泡排序 冒泡排序 -------------- 执行快速排序 快速排序 --------------
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 设计模式之创建型模式
- 浅谈设计模式的学习
- PHP设计模式之装饰者模式代码实例
- php设计模式之单例模式实例分析
- 介绍php设计模式中的工厂模式
- PHP设计模式之适配器模式代码实例
- 浅谈c#设计模式之单一原则
- C#设计模式之观察者模式实例讲解
- C#设计模式之单例模式实例讲解
- 深入理解JavaScript系列(28):设计模式之工厂模式详解
- 面向对象设计模式的核心法则
- JavaScript设计模式之单件模式介绍
- 深入理解JavaScript系列(25):设计模式之单例模式详解
- JavaScript设计模式之外观模式实例
- 常见的PHP五种设计模式小结
- 小议javascript 设计模式 推荐
- javascript 设计模式之单体模式 面向对象学习基础