相同点:同为行为型策略模式,均通过context类封装一个具体行为,都提供一个封装的方法;
不同点:
1)从定义看:目的不同
策略模式:封装不同的算法,算法间没有交互,达到算法可以自由互换目的; 实际样例:人生不同阶段的主要工作:儿童-》玩耍、成年-》工作。比如加密算法的互换(AES->RSA)
状态模式:封装不同的状态,达到状态切换后行为随之发生改变的目的。 实际样例:从儿童 切换 成年,因为状态的变化(儿童到成年),主要工作内容发生了改变。
2)具体场景代码比对
场景:人生不同阶段的主要工作:儿童-》玩耍、成年-》工作
策略模式代码:
1 public abstract class WorkAlgorithm { 2 public abstract void work(); 3 } 4 5 // 策略1定义 6 public class ChildWork extends WorkAlgorithm { 7 @override 8 public void work(){ 9 System.out.println("Child Work -> Play"); 10 } 11 } 12 // 策略2定义 13 public class AdultWork extends WorkAlgorithm { 14 @override 15 public void work(){ 16 System.out.println("Adult Work -> Work"); 17 } 18 } 19 20 // 通过context绑定具体策略,并提供调用具体策略执行的方法 21 public class Context { 22 private WorkAlgorithm workMethod; 23 24 public void setWork(WorkAlgorithm work) { 25 this.workMethod = work; 26 } 27 28 public WorkAlgorithm getWork() { 29 return workMethod; 30 } 31 32 public void work() { 33 workMethod.work(); 34 } 35 } 36 37 // 通过context动态绑定不同的策略,实现策略灵活更换的效果 38 public class Client { 39 public static void main(String[] args) { 40 41 Context context = new Context(); 42 43 // 指定策略1 44 context.setWork(new ChildWork()); 45 System.out.println("==== Child work ==="); 46 context.work(); 47 48 // 指定策略2 49 context.setWork(new AdultWork()); 50 System.out.println("==== Adult work ==="); 51 context.work(); 52 } 53 }
原文地址:https://www.cnblogs.com/clarino/p/11695214.html
时间: 2024-10-09 15:28:07