设计模式--命令模式(Command)
基本概念:
命令模式的几个角色:
Command: 抽象命令类
ConcreteCommand: 具体命令类
Invoker: 调用者
Receiver: 接收者
Client:客户类
命令模式的优缺点:
优点
1. 降低了系统耦合度
2. 新的命令可以很容易添加到系统中去。
缺点
使用命令模式可能会导致某些系统有过多的具体命令类。
Traders.java
package com.soyoungboy.command1;
public class Traders {
/**
* @Title: sailMineralWater
* @Description: TODO(卖矿泉水)
* @param 设定文件
* @return void 返回类型
* @throws
*/
public void sailMineralWater() {
System.out.println("卖矿泉水");
} /**
* @Title: sailIceBlackTea
* @Description: TODO(卖冰紅茶)
* @param 设定文件
* @return void 返回类型
* @throws
*/
public void sailIceBlackTea() {
System.out.println("卖冰紅茶");
}
}
/**
* @ClassName: Command
* @Description: TODO(抽象命令类)
*/
public abstract class Command {
private Traders traders; public Command(Traders traders) {
this.traders = traders;
} /**
* @return 返回 traders
**/
public Traders getTraders() {
return traders;
} /**
* @param traders 要设置的 traders
*/
public void setTraders(Traders traders) {
this.traders = traders;
} public abstract void sail(); }
package com.soyoungboy.command1;
/**
*
* @ClassName: MineralWaterCommand
* @Description: TODO(具体命令类 --販賣礦泉水)
*/
public class MineralWaterCommand extends Command {
public MineralWaterCommand(Traders traders) {
super(traders);
}
@Override
public void sail() {
this.getTraders().sailMineralWater();
} }
package com.soyoungboy.command1;
/**
*
* @ClassName: IceBlackTeaCommand
* @Description: TODO(具体命令类 --販賣冰紅茶)
*/
public class IceBlackTeaCommand extends Command { public IceBlackTeaCommand(Traders traders) {
super(traders);
} @Override
public void sail() {
this.getTraders().sailIceBlackTea();
} }- 接收类:Cashier.java
package com.soyoungboy.command1;
import java.util.ArrayList;
/**
* @ClassName: Cashier
* @Description: TODO(接收者 -- 收銀員類)
*/
public class Cashier {
public ArrayList<Command> drinks = new ArrayList<Command>(); /**
* @Title: addDrinks
* @Description: TODO(购买各种饮料)
* @param @param command 设定文件
* @return void 返回类型
* @throws
*/
public void addDrinks(Command command) {
drinks.add(command);
} /**
* @Title: removeDrinks
* @Description: TODO(不要某種飲料)
* @param @param command 设定文件
* @return void 返回类型
* @throws
*/
public void removeDrinks(Command command) {
drinks.remove(command);
} /**
* @Title: sail
* @Description: TODO(售卖各自的饮料)
* @param 设定文件
* @return void 返回类型
* @throws
*/
public void sail() {
for (Command drink : drinks) {
drink.sail();
}
} }
package com.soyoungboy.command1;
public class Test { public static void main(String[] args) {
Cashier cashier = new Cashier();
Traders traders = new Traders();
MineralWaterCommand mineralWaterCommand = new MineralWaterCommand(traders);
IceBlackTeaCommand iceBlackTeaCommand = new IceBlackTeaCommand(traders);
//来瓶冰红茶和矿泉水
cashier.addDrinks(mineralWaterCommand);
cashier.addDrinks(iceBlackTeaCommand);
cashier.sail();
System.out.println("----------------");
//再来瓶冰红茶
cashier.addDrinks(iceBlackTeaCommand);
cashier.sail();
System.out.println("----------------");
//不要一瓶矿泉水了
cashier.removeDrinks(mineralWaterCommand);
cashier.sail();
} }
2015年12月19日22:35:46更新
设计模式--命令模式(Command)的更多相关文章
- 设计模式 - 命令模式(command pattern) 多命令 具体解释
命令模式(command pattern) 多命令 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.csdn.ne ...
- 设计模式 - 命令模式(command pattern) 具体解释
命令模式(command pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 命令模式(command pattern) : 将请求封装成对 ...
- 设计模式 - 命令模式(command pattern) 宏命令(macro command) 具体解释
命令模式(command pattern) 宏命令(macro command) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考: 命名模式(撤销) ...
- 设计模式 - 命令模式(command pattern) 撤销(undo) 具体解释
命令模式(command pattern) 撤销(undo) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.cs ...
- 设计模式--命令模式Command(对象行为型)
一.命令模式 将一个请求封装为一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能. (1)Command类:是一个抽象类,类中对需要执行的命令进行 ...
- C#设计模式——命令模式(Command Pattern)
一.概述通常来说,“行为请求者”与“行为实现者”是紧耦合的.但在某些场合,比如要对行为进行“记录.撤销/重做.事务”等处理,这种无法抵御变化的紧耦合是不合适的.在这些情况下,将“行为请求者”与“行为实 ...
- 大话设计模式--命令模式 Command -- C++实现实例
1. 命令模式: 将请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作. 命令模式有点: a. 较容易的设计一个命令队列 b. 在需要的的情况 ...
- 设计模式-命令模式(Command)
关注公众号 JavaStorm 获取更多成长. 大约需要6分钟读完.建议收藏后阅读. 命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日 ...
- 深入浅出设计模式——命令模式(Command Pattern)
模式动机 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使得请 ...
- 设计模式 ( 十三 ) 命令模式Command(对象行为型)
设计模式 ( 十三 ) 命令模式Command(对象行为型) 1.概述 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需 ...
随机推荐
- jquery中当CheckBoxList被选中时提示
$(function(){ $('input:checkbox').on('change', function(){ //当复选框选中时出现提示 if($('input:checkbox:checke ...
- trie树模板(统计难题)
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submi ...
- 设计模式 -- 桥接模式(Bridge Pattern)
桥接模式 Bridge Pattern 结构设计模式 定义: 分离抽象部分和实现部分,使他们独立运行. 避免使用继承导致系统类个数暴增,可以考虑桥接模式. 桥接模式将继承关系转化为关联关系,减少耦合, ...
- 关于preg_match()函数的一点小说明
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $ ...
- python自动化开发-1
1.python简介 python是一门简明并且强大的面向对象的开发语言,已经在WEB开发,软件开发,科学计算,大数据分析,自动化运维等领域得到了广泛的应用. 注意:所有测试均已python3为主,与 ...
- JavaScript字符和数组一些基本算法题
1.翻转字符串 例子(要求:先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串) function reverseString(str) { str=str.sp ...
- ascii 转换为 utf-8
Python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报这样的错: UnicodeDecodeError: 'ascii' codec can't de ...
- android之活动状态、生存期、启动模式
活动状态:1.运行状态2.暂停状态3.停止状态4.销毁状态 活动的生存期 七个回调方法1.onCreate()2.onStart()3.onResume()4.onPause()5.onStop()6 ...
- cocoaPods安装成功终端代码(期间报error: RPC failed; result=56, HTTP code = 200)
Last login: Sat Oct 15 23:30:24 on ttys002 Sivek_lindeMacBook-Pro:~ Sivek_lin$ sudo gem update --sys ...
- Python学习笔记——进阶篇【第八周】———进程、线程、协程篇(Socket编程进阶&多线程、多进程)
本节内容: 异常处理 Socket语法及相关 SocketServer实现多并发 进程.线程介绍 threading实例 线程锁.GIL.Event.信号量 生产者消费者模型 红绿灯.吃包子实例 mu ...