最近在很多场合都看见设计模式的影子,一直以来,都投入主要时间在搞算法与数据结构,很来发现设计模式真的很重要。有的时候代码的可维护、可重用、可扩展确实胜过单纯的算法效率高。所以拾起大牛书籍《大话设计模式》同时参考网上诸大牛的博客,开始我的设计模式之旅。
今天先介绍一下策略模式。
概念:
定义了算法簇,分别封装起来,让它们之间可以相互替换,此模式让算法的变换不会想象到使用算法的客户。
流程:
第一步:抽象策略角色(策略类,通常由一个接口或者抽象类实现)
第二步:具体策略角色(实现相关的算法和行为的具体类)
第三步:环境角色(持有一个策略类的引用,最终给客户端调用)
优缺点:
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(); } } }