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

命令模式

一、题目:

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

二、所用模式结构视图:

设计模式练习(13)——命令模式_第1张图片

三、实例类图:

设计模式练习(13)——命令模式_第2张图片

四、实例实现代码:

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

菜单栏

package gjCommandPattern;

import java.util.ArrayList;

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

    private ArrayList gj19MenuItemsList = new ArrayList();
    //添加菜单项
    public void addMenuItem(Gj19MenuItem item){
        this.gj19MenuItemsList.add(item);
    }
    //获得菜单项
    public Gj19MenuItem getMenuItem(String itemName){
        for(int i=0;iif(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; 
    }
}

五、运行结果:

设计模式练习(13)——命令模式_第3张图片

你可能感兴趣的:(设计模式)