您的位置:首页 > 其它

设计模式练习(13)——命令模式

2017-01-20 15:50 309 查看

命令模式

一、题目:

某软件公司欲开发一个基于windows平台的公告板系统,该系统提供一个主菜单(Menu),在主菜单中包含了一些菜单项(MenuItem),可以通过Menu类的addMenuItem()方法添加菜单项,菜单上的主要方法是click(),每一个菜单项包含一个抽象命令类,具体命令类包含OpenCommand(打开命令)、CreateCommand(创建命令)和EditeCommand(编辑命令)等,命令类内置有一个excute()方法,用于调用公告板系统界面类(BoardScrean)的open()、create()、edite()等方法,现使用命令模式设计系统。

(1)绘制命令模式结构视图

(2)给出实例类图并实现代码。

二、所用模式结构视图:



三、实例类图:



四、实例实现代码:

(因为区分,所以在类的前面加了Gj19)

菜单栏

package gjCommandPattern;

import java.util.ArrayList;

/**
* 菜单栏
* @author gong
*
*/
public class Gj19Menu {

private ArrayList<Gj19MenuItem> gj19MenuItemsList = new ArrayList<Gj19MenuItem>();
//添加菜单项
public void addMenuItem(Gj19MenuItem item){
this.gj19MenuItemsList.add(item);
}
//获得菜单项
public Gj19MenuItem getMenuItem(String itemName){
for(int i=0;i<gj19MenuItemsList.size();i++){
if(gj19MenuItemsList.get(i).getItemName().equals(itemName)){
return gj19MenuItemsList.get(i);
}
}
return null;
}

}


菜单项

package gjCommandPattern;

/**
* 菜单项
* @author gong
*
*/
public class Gj19MenuItem {
private Gj19ICommand command;
private String itemName;
public Gj19MenuItem(String itemName,Gj19ICommand command) {
this.command = command;
this.itemName = itemName;
}
public Gj19ICommand getCommand() {
return command;
}
public void setCommand(Gj19ICommand command) {
this.command = command;
}
public String getItemName() {
return itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}

public void click(){
System.out.println("Gj19MenuItem中的"+this.itemName+"被执行");
this.command.excute();
}
}


公告板系统界面类

package gjCommandPattern;

/**
* 公告板系统界面类
* @author gong
*
*/
public class Gj19BoardScreen {

public void open() {
System.out.println("公告板系统界面类中open()被调用");
}
public void create() {
System.out.println("公告板系统界面类中create()被调用");
}
public void edit() {
System.out.println("公告板系统界面类中edit()被调用");
}

}


命令

package gjCommandPattern;

/**
* 命令
* @author gong
*
*/
public interface Gj19ICommand {
/**
* 执行方法
*/
public void excute();
}


创建指令

package gjCommandPattern;

/**
* 创建指令
* @author gong
*
*/
public class Gj19CreateCommand implements Gj19ICommand {

private Gj19BoardScreen  BoardScreen;

@Override
public void excute() {
BoardScreen.create();
}

public Gj19CreateCommand(Gj19BoardScreen boardScreen) {
this.BoardScreen = boardScreen;
}
}


打开指令

package gjCommandPattern;

/**
* 打开指令
* @author gong
*
*/
public class Gj19OpenCommand implements Gj19ICommand {

private Gj19BoardScreen  BoardScreen;

@Override
public void excute() {
BoardScreen.open();
}

public Gj19OpenCommand(Gj19BoardScreen boardScreen) {
this.BoardScreen = boardScreen;
}
}


编辑指令

package gjCommandPattern;

/**
* 编辑指令
* @author gong
*
*/
public class Gj19EditCommand implements Gj19ICommand {

private Gj19BoardScreen  BoardScreen;

@Override
public void excute() {
BoardScreen.edit();
}

public Gj19EditCommand(Gj19BoardScreen boardScreen) {
this.BoardScreen = boardScreen;
}
}


五、运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息