设计模式14命令模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式14命令模式相关的知识,希望对你有一定的参考价值。

技术分享

 

 

 1 package com.shejimoshi.behavioral.Command;
 2 
 3 
 4 /**
 5  * 功能:接收命令着者,这个人可以执行多种命令
 6  * 时间:2016年3月2日上午11:07:30
 7  * 作者:cutter_point
 8  */
 9 public class Recipient
10 {
11     public void findPhoneNum()
12     {
13         System.out.println("查找手机号码");
14     }
15     
16     public void findPhoneSite()
17     {
18         System.out.println("查找手机位置");
19     }
20 }

 

 1 package com.shejimoshi.behavioral.Command;
 2 
 3 
 4 /**
 5  * 功能:命令抽象类
 6  * 时间:2016年3月2日上午11:06:32
 7  * 作者:cutter_point
 8  */
 9 public abstract class Command
10 {
11     //命令的受理者
12     protected Recipient rec;
13     
14     public Command(Recipient r)
15     {
16         this.rec = r;
17     }
18     
19     //执行命令
20     public abstract void execute();
21 }

 

 1 package com.shejimoshi.behavioral.Command;
 2 
 3 
 4 /**
 5  * 功能:查找手机号码
 6  * 时间:2016年3月2日上午11:14:11
 7  * 作者:cutter_point
 8  */
 9 public class FindPhoneNumCommand extends Command
10 {
11 
12     public FindPhoneNumCommand(Recipient r)
13     {
14         super(r);
15     }
16 
17     @Override
18     public void execute()
19     {
20         this.rec.findPhoneNum();
21     }
22 
23 }

 

 1 package com.shejimoshi.behavioral.Command;
 2 
 3 
 4 /**
 5  * 功能:查找手机位置
 6  * 时间:2016年3月2日上午11:11:58
 7  * 作者:cutter_point
 8  */
 9 public class FindPhoneSiteCommand extends Command
10 {
11     
12     public FindPhoneSiteCommand(Recipient r)
13     {
14         super(r);
15     }
16     
17     @Override
18     public void execute()
19     {
20         //进行查找
21         this.rec.findPhoneSite();
22     }
23 
24 }

 

 1 package com.shejimoshi.behavioral.Command;
 2 
 3 import java.text.DateFormat;
 4 import java.text.SimpleDateFormat;
 5 import java.util.ArrayList;
 6 import java.util.Date;
 7 import java.util.List;
 8 
 9 
10 /**
11  * 功能:命令发起者
12  * 时间:2016年3月2日上午11:15:16
13  * 作者:cutter_point
14  */
15 public class Sponsor
16 {
17     private List<Command> orders = new ArrayList<Command>();
18     
19     //设置订单
20     public void setOrder(Command command)
21     {
22         orders.add(command);
23         //获得时间
24         Date data = new Date();
25         DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
26         System.out.println("增加订单" + command.getClass().getName() + "\t时间:" + format.format(data));
27     }
28     
29     //取消订单
30     public void cancelOrder(Command command)
31     {
32         orders.remove(command);
33         //获得时间
34         Date data = new Date();
35         DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
36         System.out.println("取消订单" + command.getClass().getName() + "\t时间:" + format.format(data));
37     }
38     
39     //执行全部订单
40     public void notigy()
41     {
42         for(Command cmd : orders)
43         {
44             cmd.execute();
45         }
46     }
47 }

 

 1 package com.shejimoshi.behavioral.Command;
 2 
 3 
 4 /**
 5  * 功能:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作
 6  * 时间:2016年3月2日上午11:04:34
 7  * 作者:cutter_point
 8  */
 9 public class Test
10 {
11     public static void main(String[] args)
12     {
13         //首先店员准备
14         Recipient rec = new Recipient();
15         //那些服务命令
16         Command cmd1 = new FindPhoneNumCommand(rec);
17         Command cmd2 = new FindPhoneSiteCommand(rec);
18         
19         //下单者准备
20         Sponsor sps = new Sponsor();
21         
22         //开门迎客
23         sps.setOrder(cmd1);
24         sps.setOrder(cmd2);
25         
26         //店面开启运行模式
27         sps.notigy();
28         
29     }
30 }

 

测试结果:

增加订单com.shejimoshi.behavioral.Command.FindPhoneNumCommand	时间:2016-03-02
增加订单com.shejimoshi.behavioral.Command.FindPhoneSiteCommand	时间:2016-03-02
查找手机号码
查找手机位置

  

 

以上是关于设计模式14命令模式的主要内容,如果未能解决你的问题,请参考以下文章

FragmentStatePageAdapter 缓存,重新创​​建活动后如何引用旧片段? (对于前 - 横向模式)

命令模式

初学设计模式之命令模式

用于从 cloudkit 检索单列的代码模式/片段

设计模式14命令模式

设计模式(14)--Command(命令模式)--行为型