设计模式-策略模式
来源:互联网 发布:滑坡灾害数据 编辑:程序博客网 时间:2024/06/16 04:15
最近在很多场合都看见设计模式的影子,一直以来,都投入主要时间在搞算法与数据结构,很来发现设计模式真的很重要。有的时候代码的可维护、可重用、可扩展确实胜过单纯的算法效率高。所以拾起大牛书籍《大话设计模式》同时参考网上诸大牛的博客,开始我的设计模式之旅。
今天先介绍一下策略模式。
概念:
定义了算法簇,分别封装起来,让它们之间可以相互替换,此模式让算法的变换不会想象到使用算法的客户。
流程:
第一步:抽象策略角色(策略类,通常由一个接口或者抽象类实现)
第二步:具体策略角色(实现相关的算法和行为的具体类)
第三步:环境角色(持有一个策略类的引用,最终给客户端调用)
优缺点:
1.优点:
(1)、使用组合替代继承,更灵活(算法独立,可以任意扩展);
(2)、客户不需要知道策略、算法的实现细节;
(3)、使用策略模式可以避免使用多重条件(if-else)语句。
2.缺点:
(1)、客户端必须知道所有的策略类,并自行决定使用哪一个策略类,这点有同于简单工厂模式。
示例代码
package Pattern;import java.util.Scanner;interface Operation// 父类接口{public int GetResult(int opA, int opB);}class AddOperation implements Operation {public int GetResult(int opA, int opB) {return opA + opB;}}class SubOperation implements Operation {public int GetResult(int opA, int opB) {return opA - opB;}}class MulOperation implements Operation {public int GetResult(int opA, int opB) {return opA * opB;}}class StrategyMethod {private Operation myOperation;public StrategyMethod(Operation tempOperation) {myOperation = tempOperation;}public StrategyMethod() {myOperation = null;}public int GetResult(int opA, int opB) {return myOperation.GetResult(opA, opB);}}public class Pattern {public static void main(String[] args) {try {Scanner input = new Scanner(System.in);int opA, opB, result;opA = input.nextInt();opB = input.nextInt();String op = "*";StrategyMethod strategy = new StrategyMethod();if (op.equals("+")) {strategy = new StrategyMethod(new AddOperation());result = strategy.GetResult(opA, opB);System.out.println(result);} else if (op.equals("-")) {strategy = new StrategyMethod(new SubOperation());result = strategy.GetResult(opA, opB);System.out.println(result);} else if (op.equals("*")) {strategy = new StrategyMethod(new MulOperation());result = strategy.GetResult(opA, opB);System.out.println(result);}} catch (Exception e) {e.printStackTrace();}}}
0 0
- 设计模式-策略模式
- 设计模式:策略模式
- 设计模式-策略模式
- 设计模式 - 策略模式
- 设计模式-策略模式
- 设计模式-----策略模式
- 设计模式 策略模式
- 设计模式-策略模式
- 设计模式-【策略模式】
- 设计模式-----策略模式
- 设计模式-策略模式
- 设计模式--策略模式
- 设计模式- 策略模式
- 设计模式- 策略模式
- 设计模式------策略模式
- 设计模式--策略模式
- 设计模式-策略模式
- 设计模式--策略模式
- 恩师曝菲尔普斯将复出 有望征战世锦赛资格战
- oracle中创建复合索引方法
- Insertion Sort List
- LR函数
- 网游服务器技术-语言选择
- 设计模式-策略模式
- 别再耍流氓了: 请别再用strcpy, 而用strncpy
- 《统计自然语言处理基础》笔记(3)词汇获取 之 简介
- 二叉树的序列化与反序列化的一些思考
- jQuery中选择器小问题
- MIT python 公开课
- 博弈论
- android DOM解析XML
- 线段 矩形 矩形与矩形 相交