当前位置:文档之家› 命令模式案例实验报告

命令模式案例实验报告

软件设计与体系结构
实 验 报 告

课程名称 软件设计与体系结构 课程编号
0920116

实验项目名称 命令模式案例
学号 班级
姓名 专业
学生所在学院 指导教师
实验室名称地点
实验时间
实验名称: 命令模式案例
实验目的:命令模式(Observer Pattern)是设计模式中行为模式的一种,它解决了上述具有一对
多依赖关系的对象的重用问题。此模式的参与者分为两大类,一类是被观察的目标,另一类是观
察该目标的观察者们。正因为该模式是基于“一对多”的关系,所以该模式一般是应用于由一个
目标对象和N个观察者对象组成(当然也可以扩展为有多个目标对象,但我们现在只讨论前者)
的场合。当目标对象的状态发生改变或做出某种行为时,正在观察该目标对象的观察者们将自动
地、连锁地作出相应的响应行为。
通过本次实验了解观察者模式的原理。并能够运用观察者模式来进行编程。
实验内容

1 UML类图
命令模式-烧烤店-松耦合设计:

2 程序的源代码
命令模式-烧烤店-松耦合设计:
package Bake;

public class BakeChickenWingCommand extends Command {
public BakeChickenWingCommand(Barbecuer receiver) {
super(receiver);
// TODO Auto-generated constructor stub
}

@Override
public void ExecuteCommand() {
// TODO Auto-generated method stub
receiver.BakeChickenWing();
}
}
package Bake;

public class BakeMuttonCommand extends Command {
public BakeMuttonCommand(Barbecuer receiver) {
super(receiver);
// TODO Auto-generated constructor stub
}

@Override
public void ExecuteCommand() {
// TODO Auto-generated method stub
receiver.BakeMutton();
}

}
package Bake;

public class Barbecuer {
public void BakeMutton(){
System.out.println("烤羊肉串");
}
public void BakeChickenWing(){
System.out.println("烤鸡翅");
}

}
package Bake;

public abstract class Command {
protected Barbecuer receiver;

public Command(Barbecuer receiver) {
super();
this.receiver = receiver;
}

abstract public void ExecuteCommand();
}
package Bake;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class Waiter {
private List orders;

public Waiter() {
super();
orders = new ArrayList();
}
public void SetOrder(Command command){
if(command.toString().substring(0, 14).equals("Bake.BakeChick")){
System.out.println("鸡翅没有了,请点别的烧烤。");
}
// else if(command.toString().substring(0, 14).equals("Bake.BakeMutto")){
// System.out.println("The mutton have been sold out ,please try something else");
// }
else{
orders.add(command);
System.out.println("点餐:"+command.toString().substring(5, 15));
}
}
public void CancelOrder(Command command){
orders.remove(command);
System.out.println("取消点餐:"+command.toString().substring(0, 15));
}
public void Notify(){
ListIterator i = orders.listIterator();
while (i.hasNext()){
i.next().ExecuteCommand();
}
}
}
package Bake;

public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Barbecuer boy = new Barbecuer();
Command bm = new BakeMuttonCommand(boy);
Command bc = new BakeChickenWingCommand(boy);
Waiter Belldandy = new Waiter();
Belldandy.SetOrder(bm);
Belldandy.SetOrder(bc);
Belldandy.Notify();
}

}
3实验截图
命令模式-烧烤店-松耦合设计:

对该模式的认识
经过本次命令模式的实验,通过自己动手编代码,是自己理解命令模式机制,并且知道命令模式有以
下的优点: 适用性:想要实现回调函数功能,想要在不同的时刻指定、排列和执行请求,需要支持取消
和改变日志操作;效果:命令模式将调用操作的对象与知道如何实现该操作的对象解耦,Command是头
等的对象。它们可像任何其他对象一样被操纵和扩展,多个命令能被装配成一个复合命令。经过本次实验
课的练习,我明白了编代码也是一种技巧,而设计模式便是大家提炼出来的有技巧编代码。使我对软件设
计与体系结构这门课有了浓厚的兴趣,相信在学习这门课的知识,会让我获益良多。

扣分原因(有扣分时填写) 扣分

相关主题