`
hanlingbo2008
  • 浏览: 80215 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java内的命令(Command)模式例子

阅读更多

命令模式例子------创世纪系统

 

系统开始时,世界是个黑暗的窗体,窗体上有4个按钮: Let There Be Light(要有光), Let There Be Land(要有地),Reset(复原),God Rests(上帝休息了)

 

代码:

/* 抽象命令角色 */
public interface CommandFromGod
{
   public void Execute();
}

 

import java.awt.*;
import java.awt.event.*;
/* 具体命令角色,Let There be light*/
public class LetThereBeLightCommand extends Button implements CommandFromGod
{
	Panel p;
	public LetThereBeLightCommand(String caption, Panel pnl)
	{
		super(caption);
		p = pnl;
	}
	public void Execute()
	{
		p.setBackground(Color.white);
	}
}

 

import java.awt.*;
import java.awt.event.*;
/* 具体命令角色,Let There be land*/
public class LetThereBeLandCommand extends Button implements CommandFromGod
{
	Panel p;
	public LetThereBeLandCommand(String caption, Panel pnl)
	{
		super(caption);
		p = pnl;
	}
	public void Execute()
	{
		p.setBackground(Color.orange);
	}
}

 

import java.awt.*;
import java.awt.event.*;
/* 具体命令角色,Rests*/
public class GodRestsCommand extends Button implements CommandFromGod
{

	public GodRestsCommand(String caption)
	{
		super(caption);
	}
	public void Execute()
	{
		System.exit(0);
	}
}

 

import java.awt.*;
import java.awt.event.*;
/* 具体命令角色,Reset*/
public class ResetCommand extends Button implements CommandFromGod
{
	Panel p;
	public ResetCommand(String caption, Panel pnl)
	{
		super(caption);
		p = pnl;
	}
	public void Execute()
	{
		p.setBackground(Color.black);
	}
}

 

import java.awt.*;
import java.awt.event.*;
/* Client */
public class TheWorld extends Frame implements ActionListener
{
   LetThereBeLightCommand btnLight;
   LetThereBeLandCommand btnLand;
   ResetCommand btnReset;
   GodRestsCommand btnExit;
   Panel p;

   public TheWorld()
   {
      super("This is the world, and God says...");

      p = new Panel();
      p.setBackground(Color.black);
      
      add(p);
      btnLight = new LetThereBeLightCommand("Let there be light", p);
      btnLand = new LetThereBeLandCommand("Let there be land", p);
      btnReset = new ResetCommand("Reset", p);
      btnExit = new GodRestsCommand("God rests");

      p.add(btnLight);
      p.add(btnLand);
      p.add(btnReset);
      p.add(btnExit);

      btnLight.addActionListener(this);
      btnLand.addActionListener(this);
      btnReset.addActionListener(this);
      btnExit.addActionListener(this);
      setBounds(100,100,400,200);
      setVisible(true);
   }
   //-----------------------------------------
   public void actionPerformed(ActionEvent e)
   {
      CommandFromGod obj = (CommandFromGod)e.getSource();
      obj.Execute();
   }
   //-----------------------------------------
   static public void main(String[] argv)
   {
      new TheWorld();
   }
}

 这个例子中没有Recevier角色和Invoker角色,此处完全可以分离出这两种角色,这样的话似乎更复杂了!

分享到:
评论

相关推荐

    深入浅出设计模式(中文版电子版)

    5.2CommandPattern(命令模式) 179 5.2.1定义 179 5.2.2现实中的实例——餐馆订菜 180 5.2.3C#实例——简单计算器 181 5.2.4Java实例——总开关 185 5.2.5优势和缺陷 189 5.2.6应用情景 189 5.3Interpreter...

    深入浅出设计模式(中文版)

    5.2CommandPattern(命令模式) 179 5.2.1定义 179 5.2.2现实中的实例——餐馆订菜 180 5.2.3C#实例——简单计算器 181 5.2.4Java实例——总开关 185 5.2.5优势和缺陷 189 5.2.6应用情景 189 5.3Interpreter...

    源码:阎宏设计模式光盘

    com.javapatterns.command 命令模式 com.javapatterns.command.swingundo 专题:Swing库中的命令撤销和恢复 com.javapatterns.composite 合成模式 com.javapatterns.decorator 装饰模式 com.javapatterns.dip ...

    Command-Pattern:这个项目是命令模式的一个例子。 该项目还演示了模型-视图-控制器模式的使用

    命令模式示例项目这个项目是命令模式的一个例子。 该项目还演示了模型-视图-控制器模式的使用。目标以某种形式使用命令模式在这个项目中; 命令模式用于模拟绘制程序。 重做示例由于项目模拟了一个绘制程序,每个...

    java源码解读-DesignPattern:Android源码设计模式解析与实战读书笔记源代码

    包名command_pattern表示的是命令模式的简单例子 包名decorator_pattern.example_one表示的是装饰模式的简单例子1 包名decorator_pattern.example_2表示的是装饰模式的简单例子2(人穿什么衣服的例子,比较直观的...

    研磨设计模式-part2

    第13章 命令模式(Command) 第14章 迭代器模式(Iterator) 第15章 组合模式(Composite) 第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式...

    研磨设计模式-part4

    第13章 命令模式(Command) 第14章 迭代器模式(Iterator) 第15章 组合模式(Composite) 第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式...

    研磨设计模式-part3

    第13章 命令模式(Command) 第14章 迭代器模式(Iterator) 第15章 组合模式(Composite) 第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式...

    Head.First设计模式_PDF.part1

    使用Java内建的观察者模式 java.util.Observable的黑暗面 设计箱内的工具 习题解答 …… 3 装饰者模式:装饰对象 4 工厂模式:烘烤OO的精华 5 单件模式:独一无二的对象 6 命令模式:封装调用 7 ...

    二十三种设计模式【PDF版】

    设计模式之 Command(命令) 什么是将行为封装,Command 是最好的说明. 设计模式之 Observer(观察者) 介绍如何使用 Java API 提供的现成 Observer 设计模式之 Iterator(迭代器) 这个模式已经被整合入Java的...

    mt-sics:一个使用Mettler Toledo标准接口命令集(MT-SICS)的Mettler Toledo平衡和缩放的node.js接口库

    连续模式 9600 8 /否 1个 没有任何 <CR> ANSI / WIN 离开 例子 var MTSICS = require ( 'mt-sics' ) ; var mtsics = new MTSICS ( { uri : 'tcp://192.168.1.1:4001' } ) ; mtsics . get_commands ( function ( ...

    Tcl_TK编程权威指南pdf

    序言回到顶部↑Tcl为工具命令语言(Tool Command Language)的缩写。它其实是指两样东西:一种脚本语言,以及该脚本语言的解释器。该解释器可以很容易地嵌入到你的应用程序中。Tcl和与之关联的图形用户界面工具包(Tk)...

    asp.net知识库

    C#中利用GetOleDbSchemaTable获取数据库内表信息[原创] 如何解决ACCESS中SELECT TOP语句竟然返回多条记录的问题? Asp.net 利用OleDb的GetOLEDBSchemaTable方法得到数据库架构信息 用于 Visual Studio .Net 的 IBM ...

    【卷一/共两卷】AJAX实战pdf高清版90M

    3.2.3 重用用户操作处理函数:Command模式 3.2.4 保持对资源的唯一引用:Singleton模式 3.3 模型一视图一控制器 3.4 Web服务器端的MVC 3.4.1 不使用模式的Ajax Web服务器层 3.4.2 重构领域模型 3.4.3 从表现中分离...

    新版Android开发教程.rar

    包装盒内附 数据工具包。 更多信息 https://sites.google.com/a/android.com/opensource/release-features Android Android Android Android 盈利模式 Android 的 App Market 模式,软件开发者获得 7 成收入, 3 成...

    网管教程 从入门到精通软件篇.txt

     如果不带任何参数,diskpart 命令将启动 diskpart 的 Windows 字符模式版本。  /add  创建新的分区。  /delete  删除现有分区。  device_name  要创建或删除分区的设备。设备名称可从 map 命令的输出...

    Spring中文帮助文档

    5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. AOP代理 6.2. @AspectJ支持 6.2.1. 启用@AspectJ支持 6.2.2. 声明...

    Spring API

    5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. AOP代理 6.2. @AspectJ支持 6.2.1. 启用@AspectJ支持 6.2.2. 声明...

    net学习笔记及其他代码应用

    internal: 在同一命名空间内可以访问。 2 .列举ASP.NET 页面之间传递值的几种方式。 答. 1.使用QueryString, 如....?id=1; response. Redirect().... 2.使用Session变量 3.使用Server.Transfer 3. 一列数的规则...

Global site tag (gtag.js) - Google Analytics