查看: 1598|回复: 0

[Java代码] Java基于命令模式实现邮局发信功能详解

发表于 2018-5-4 08:00:02

本文实例讲述了Java基于命令模式实现邮局发信功能。分享给大家供大家参考,具体如下:

一. 模式定义

命令模式,将来自客户端的请求封建为一个对象,无须了解这个请求激活的动作或有关接受这个请求的处理细节。命令模式的根本目的在于将"请求者"与"实现者"之间解耦。

二. 模式举例

1 模式分析

我们借用邮局发信来说明这一模式。

2 命令模式静态类图

3 代码示例

3.1信件接收者接口一IReceiver

  1. package com.demo.receiver;
  2. /**
  3. * 信件接收者接口
  4. *
  5. * @author
  6. *
  7. */
  8. public interface IReceiver {
  9. /**
  10. * 收件人收到信件读取
  11. *
  12. * @param message
  13. */
  14. public void readMail(String message);
  15. }
复制代码

3.2信件接收者一Receiver

  1. package com.demo.receiver;
  2. /**
  3. * 信件接收者
  4. *
  5. * @author
  6. *
  7. */
  8. public class Receiver implements IReceiver {
  9. /**
  10. * 收件人收到信件读取
  11. *
  12. * @param message
  13. */
  14. public void readMail(String message) {
  15. System.out.println("收件人读取信件:" + message);
  16. }
  17. }
复制代码

3.3邮局接口一IPost

  1. package com.demo.command;
  2. /**
  3. * 邮局接口
  4. *
  5. * @author
  6. *
  7. */
  8. public interface IPost {
  9. /**
  10. * 邮局发送信件
  11. *
  12. * @param message
  13. */
  14. public void sendMail(String message);
  15. }
复制代码

3.4邮局实现一Post

  1. package com.demo.command;
  2. import com.demo.receiver.IReceiver;
  3. /**
  4. * 邮局实现类
  5. *
  6. * @author
  7. *
  8. */
  9. public class Post implements IPost {
  10. // 收信人对象实例
  11. private final IReceiver receiver;
  12. /**
  13. * 构造方法传入收信人对象实例
  14. *
  15. * @param receiver
  16. */
  17. public Post(IReceiver receiver) {
  18. this.receiver = receiver;
  19. }
  20. /**
  21. * 邮局发送信件
  22. *
  23. * @param message
  24. */
  25. @Override
  26. public void sendMail(String message) {
  27. System.out.println("邮局将信件发给收信人...");
  28. // 邮局发送信件给收信人
  29. this.receiver.readMail(message);
  30. }
  31. }
复制代码

3.5消息发送者一Invoker

  1. package com.demo.invoker;
  2. import com.demo.command.IPost;
  3. /**
  4. * 发信人
  5. *
  6. * @author
  7. *
  8. */
  9. public class Invoker {
  10. // 邮局私有属性
  11. private IPost post;
  12. /**
  13. * 设置邮局对象实例
  14. *
  15. * @param post
  16. */
  17. public void setPost(IPost post) {
  18. this.post = post;
  19. }
  20. /**
  21. * 发信人发送信件
  22. *
  23. * @param message
  24. */
  25. public void postMail(String message) {
  26. System.out.println("发信人投递信件给邮局...");
  27. this.post.sendMail(message);
  28. }
  29. }
复制代码

3.6让邮局开始工作一Client

  1. package com.demo;
  2. import com.demo.command.IPost;
  3. import com.demo.command.Post;
  4. import com.demo.invoker.Invoker;
  5. import com.demo.receiver.Receiver;
  6. /**
  7. * 客户端应用程序
  8. *
  9. * @author
  10. *
  11. */
  12. public class Client {
  13. /**
  14. * @param args
  15. */
  16. public static void main(String[] args) {
  17. // 创建一个收信人对象实例
  18. Receiver receiver = new Receiver();
  19. // 创建一个邮局对象实例 传入收信人对象实例
  20. IPost post = new Post(receiver);
  21. // 创建一个发信人对象实例 传入邮局对象实例
  22. Invoker invoker = new Invoker();
  23. // 设置邮局
  24. invoker.setPost(post);
  25. // 发信人开始发送信息!!!
  26. invoker.postMail("你好!好久不见,最近工作忙吗?");
  27. }
  28. }
复制代码

4 运行结果

发信人投递信件给邮局...
邮局将信件发给收信人...
收件人读取信件:你好!好久不见,最近工作忙吗?

三. 该模式设计原则

1"开-闭"原则

2最少知识原则

四. 命令模式静态类图

更多java相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。



回复

使用道具 举报