标签:contex 使用 ext lse 个人 准备 abs else 一个人
策略模式
对象具备某个行为,但是在不同的场景中,该行为有不同的实现算法。比如一个人的
是准备一组算法,并将这组算法封装到一系列的策略类里面,作为一个抽象策略类的子类。
主要解决
在有多种算法相似的情况下,使用 if...else 或 switch...case 所带来的复杂性和臃肿性。
抽象策略(Strategy)类:
定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,
环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。
具体策略(Concrete Strategy)类:
实现了抽象策略定义的接口,提供具体的算法实现。
环境(Context)类:
持有一个策略类的引用,最终给客户端调用。
1 public class Strategy { 2 public static void main(String[] args) { 3 Context context = new Context(new add()); 4 int i = context.toCalculate(1, 2); 5 System.out.println(i); 6 } 7 } 8 9 //抽象策略 10 abstract class calculate { 11 public abstract int toCalculate(int a, int b); 12 } 13 14 //具体策略 15 class add extends calculate { 16 @Override 17 public int toCalculate(int a, int b) { 18 return a + b; 19 } 20 } 21 22 class sub extends calculate { 23 @Override 24 public int toCalculate(int a, int b) { 25 return a - b; 26 } 27 } 28 29 //环境 30 class Context { 31 //封装了策略 32 private calculate cal; 33 34 public Context(calculate cal) { 35 this.cal = cal; 36 } 37 38 public int toCalculate(int a, int b) { 39 return cal.toCalculate(a, b); 40 } 41 }
标签:contex 使用 ext lse 个人 准备 abs else 一个人
原文地址:https://www.cnblogs.com/loveer/p/11286075.html