码迷,mamicode.com
首页 > 其他好文 > 详细

【设计模式】策略模式 vs 状态模式

时间:2019-10-17 22:05:03      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:技术   设计模式   play   pre   new   指定   加密算法   main   mamicode   

相同点:同为行为型策略模式,均通过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 }

 

【设计模式】策略模式 vs 状态模式

标签:技术   设计模式   play   pre   new   指定   加密算法   main   mamicode   

原文地址:https://www.cnblogs.com/clarino/p/11695214.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!