Java基于命令模式实现邮局发信功能详解
作者:chengqiuming 发布时间:2023-07-03 04:57:25
标签:Java,命令模式
本文实例讲述了Java基于命令模式实现邮局发信功能。分享给大家供大家参考,具体如下:
一. 模式定义
命令模式,将来自客户端的请求封建为一个对象,无须了解这个请求激活的动作或有关接受这个请求的处理细节。命令模式的根本目的在于将"请求者"与"实现者"之间解耦。
二. 模式举例
1 模式分析
我们借用邮局发信来说明这一模式。
2 命令模式静态类图
3 代码示例
3.1信件接收者接口一IReceiver
package com.demo.receiver;
/**
* 信件接收者接口
*
* @author
*
*/
public interface IReceiver {
/**
* 收件人收到信件读取
*
* @param message
*/
public void readMail(String message);
}
3.2信件接收者一Receiver
package com.demo.receiver;
/**
* 信件接收者
*
* @author
*
*/
public class Receiver implements IReceiver {
/**
* 收件人收到信件读取
*
* @param message
*/
public void readMail(String message) {
System.out.println("收件人读取信件:" + message);
}
}
3.3邮局接口一IPost
package com.demo.command;
/**
* 邮局接口
*
* @author
*
*/
public interface IPost {
/**
* 邮局发送信件
*
* @param message
*/
public void sendMail(String message);
}
3.4邮局实现一Post
package com.demo.command;
import com.demo.receiver.IReceiver;
/**
* 邮局实现类
*
* @author
*
*/
public class Post implements IPost {
// 收信人对象实例
private final IReceiver receiver;
/**
* 构造方法传入收信人对象实例
*
* @param receiver
*/
public Post(IReceiver receiver) {
this.receiver = receiver;
}
/**
* 邮局发送信件
*
* @param message
*/
@Override
public void sendMail(String message) {
System.out.println("邮局将信件发给收信人...");
// 邮局发送信件给收信人
this.receiver.readMail(message);
}
}
3.5消息发送者一Invoker
package com.demo.invoker;
import com.demo.command.IPost;
/**
* 发信人
*
* @author
*
*/
public class Invoker {
// 邮局私有属性
private IPost post;
/**
* 设置邮局对象实例
*
* @param post
*/
public void setPost(IPost post) {
this.post = post;
}
/**
* 发信人发送信件
*
* @param message
*/
public void postMail(String message) {
System.out.println("发信人投递信件给邮局...");
this.post.sendMail(message);
}
}
3.6让邮局开始工作一Client
package com.demo;
import com.demo.command.IPost;
import com.demo.command.Post;
import com.demo.invoker.Invoker;
import com.demo.receiver.Receiver;
/**
* 客户端应用程序
*
* @author
*
*/
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
// 创建一个收信人对象实例
Receiver receiver = new Receiver();
// 创建一个邮局对象实例 传入收信人对象实例
IPost post = new Post(receiver);
// 创建一个发信人对象实例 传入邮局对象实例
Invoker invoker = new Invoker();
// 设置邮局
invoker.setPost(post);
// 发信人开始发送信息!!!
invoker.postMail("你好!好久不见,最近工作忙吗?");
}
}
4 运行结果
发信人投递信件给邮局...
邮局将信件发给收信人...
收件人读取信件:你好!好久不见,最近工作忙吗?
三. 该模式设计原则
1"开-闭"原则
2最少知识原则
四. 命令模式静态类图
更多java相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
来源:https://blog.csdn.net/chengqiuming/article/details/70139489
0
投稿
猜你喜欢
- 问题:在web里面用iframe连接一个html文件 - html文件里面是超链接 -&nb
- Java8对于LocalDateTime的序列化和反序列化这里以jackjson为例配置反序列化工具/** * 时间戳反序列化时间 * *
- 微服务治理Spring Cloud 工具套件为微服务治理提供了全面的技术支持。这些治理工具主要包括服务的注册与发现、负载均衡管理、动态路由、
- 本文实例讲述了C#调用存储过程的方法。分享给大家供大家参考,具体如下:CREATE PROCEDURE [dbo].[GetNameById
- 介绍fastjson 1.2.0之后的版本支持JSONPath。,可以在java框架中当作json对象查询语言(OQL)来使用。常用APIp
- PreparedStatement介绍可以通过调用 Connection 对象的 prepareStatement(String sql)
- 今天接触了一下ToStringBuilder类,这里做一个备忘。ToStringBuilder在包 common-lang 中,主要用于一个
- 什么是OKHttp一般在Java平台上,我们会使用Apache HttpClient作为Http客户端,用于发送 HTTP 请求,并对响应进
- 今天讲解一下Fragment的控制,主要是切换View和页面替换等操作。还有就是如何获取Fragment的管理对象,以及与Activity的
- Spring Boot1.为什么要使用 Spring Boot因为Spring, SpringMVC 需要使用的大量的配置文件 (xml文件
- mapper文件使用in("str1","str2")mybatis的xxxMapper.xml文件
- 目录栈溢出(虚拟机栈和本地方法栈)产生原因解决思路堆溢出产生原因解决思路方法区和运行时常量池溢出产生原因解决思路本机直接内存溢出产生原因解决
- 一个简单的HelloSpringMVC程序先在web,xml中注册一个前端控制器(DispatcherServlet) <?xml v
- 在spring的注解 @RequestMapping 之下可以直接获取 HttpServletRequest 来获得诸如request he
- 谈到 Java 的线程池最熟悉的莫过于 ExecutorService 接口了,jdk1.5 新增的 java.util.concurren
- 注:图片来源于网络SpringBoot作为业内公认的优秀开源框架,它的 * 是如何实现呢?在这里首先对一些基础组件进行分析;1、事件Appl
- 前言前一篇文章我们熟悉了HikariCP连接池,也了解到它的性能很高,今天我们讲一下另一款比较受欢迎的连接池:Druid,这是阿里开源的一款
- 读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由jvm自己控制的,你只要上好相应的锁即可。如果你的代码只读数据,可以很多人同时
- 最近要给一个 Winform 项目添加功能,需要一个能显示进度条的弹窗,还要求能够中止任务,所以就做了一个,在此做个记录总结。虽然用的是比较
- 免责声明:本教程所有资源均来源于网络;仅用于学习交流,请勿用于任何商业行为;如需要,请使用正版授权;侵权联删。推荐最新 IntelliJ I