设计模式练习(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; } }
五、运行结果:
相关文章推荐
- 13、C语言和设计模式(命令模式)
- 设计模式(13)----- 命令设计模式(升级----加一个撤销的命令)
- .NET中的设计模式四:命令模式
- Java实用设计模式:Command(命令模式)
- GoF 23个经典的设计模式13--行为模式之 责任链模式(未完代续)
- java设计模式之Command(菜单命令)
- 乐在其中设计模式(C#) - 命令模式(Command Pattern)
- 乐在其中设计模式(C#) - 命令模式(Command Pattern)
- 设计模式(13)-享元模式(Flyweight)
- 设计模式与泡mm的关系之Command命令模式及再思考
- 设计模式之Command命令模式
- 乐在其中设计模式(C#) - 命令模式(Command Pattern)
- C++实现网络服务器命令模式(设计及模板实现)
- C#设计模式(13)-Proxy Pattern
- 设计模式在二维图形程序里的应用(命令模式--command)
- 设计模式----Command(命令)模式
- .NET中的设计模式四:命令模式 选择自 lane_cn 的 Blog
- 命令设计模式
- C#设计模式之命令模式
- GEF框架中的设计模型(命令模式)