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


猜你喜欢
- 简单概述在日常生活中,我们经常会突发一些奇思妙想,或是一个画面,或是几个符号。这时候无法使用拍照或者打字功能实现,想拿笔记下又身边找不到笔。
- Comparable 比较器,内置定义的比较方法,实现比较 较简单Comparator 策略模式,需要定义不同的策略和比较的对象,实现比较
- 项目已经添加了svn,但右键项目时找不到Svn选择但在VCS中却有,很奇怪这个问题是svn的根路径与当前IDEA打开的项目路径不一致的原因在
- 本文实例为大家分享了flutter实现倒计时加载页面的具体代码,供大家参考,具体内容如下效果图实现步骤1、pubspec.yaml中添加依赖
- 目录简介:根据sun的官方文档描述:示例:@SuppressWarnings注解的作用一.@SuppressWarings注解示例1——抑制
- 一、概述运行时变更就是设备在运行时发生变化(例如屏幕旋转、键盘可用性及语言)。发生这些变化,Android会重启Activity,这时就需要
- 本文实例讲述了C#实现对二维数组排序的方法。分享给大家供大家参考。具体实现方法如下:/// <summary>/// A gen
- 编译篇 研究Chrome ,首先得把它编译出来,这对于后续的代码分析和阅读有很大的帮助,想想自己编译出一个 Chrome 浏览器来使用,那是
- 问题描述在应用MyBatis时,使用对象关系映射,将对象和Aliase映射起来。在Mybatis的文档明确写出,如果你没有明确定义实体类的A
- 数据表格能够清晰的呈现数据信息,但是我们对于一些繁杂多变的数据想要很直观的看到数据变化走势或者数据的占比时,数据图表会更具代表性,并且在呈现
- RecyclerView 是 android-support-v7-21 版本中新增的一个 Widgets, 还有一个 CardView 会
- 定义 1、如果注解中有属性,那么必须给属性赋值。package com.lxc.Test;// 定义一个注解public @int
- 下面通过图文并茂的方式给大家讲解下Java开发环境配置,具体内容如下:对于JAVA新手来说,刚开始要学JAVA,而自己的电脑上毫无与JAVA
- 本文实例为大家分享了C#实现语音播报功能的具体代码,供大家参考,具体内容如下环境:window10vs2019 16.5.5.netfram
- 1、Idea 设置字体settings --> Editor --> Font2、Idea配置MavenSettings --&
- 效果图:完全代码(下方有详细解读) private void textBox1_TextChanged(object sender, Eve
- 前面我们完成了与商品类别相关的业务逻辑,接下来我们开始做具体商品部分。1. 数据库建表并映射Model首先我们在数据库中新建一张表,然后使用
- 使用版本:spring-boot: 2.1.6.RELEASEsping: 5.1.8.RELEASEjava: openjdk 11.0.
- IDEA配置阿里规范插件P3C进入idea -》File -》 Settings -》Plugins到搜索框中搜索:Alibaba Java
- @PathVariable接收两个参数首先@PathVariable无法接收对象,但是可以接收多个值var data = obj.data;