`
jsczxy2
  • 浏览: 1259982 次
  • 性别: Icon_minigender_1
  • 来自: 常州
文章分类
社区版块
存档分类
最新评论

学习设计模式之Command模式(命令模式)

阅读更多

引用某大的文章:

我们常见的一种情况就是菜单命令,按钮监听。下面就举出一个常用的简单例子 :

public class Test {
   public static void main(String[] args) {
	JButton jb = new JButton();
	jb.addActionListener(new ActionListener(){

		public void actionPerformed(ActionEvent e) {
			// TODO Auto-generated method stub
			doSomething();
		}
		
	});
}
}
 

设计JButton的时候我们没办法决定用户调用什么方法,什么时候调用, 所以我们提供一个外接口来响应用户的请求,并把具体响应内容对外给用户由用户决定响应内容。如上代码,当用户点击按钮时,调用的方法的 actionPerformed(),当你创建该按钮方法时,可以使用对应于特定命令行为的actionPerformed()方法。给它绑定一个监听对 象(ActionListener)。

下面使用一个简单的例子,比如网游中需要切换武器迎敌,那么例子如下:

1.interface Weapon

package com.xuyi.command;


/**
 * @author xuyi
 * 切换武器
 */
public interface Weapon {
	public String switchWeapon();
}
 

 2.Test.java

package com.xuyi.command;

//command模式-命令模式:使用command模式提供服务,最典型的例子就是按钮侦听事件
public class Test {
	private static void kill(Weapon weapon){
		System.out.println(weapon.switchWeapon());
	}
	
	private static String doSomeThing(){
		return "武器切换成圆月弯刀";
	}
	
	public static void main(String[] args) {
		//先实现接口
		Weapon weapon = new Weapon(){
			public String switchWeapon() {
				return doSomeThing();
			}
		};
		//进行侦听这个接口的实现,doSomeThing实现可以任意指定
		kill(weapon);
		
	}
	
}

 3.Command模式与其他模式关系

    1).Command模式与解释器模式类似

    2).Comsmand模式也类似于Factory模式,在Factory中用户不知道何时创建对象,也不知道该实例化哪一个类。

    3).Command模式也经常与其它模式一起使用如上面提的actionListener,我们通常都是类先实现这个接口,然后再

addActionListener(this)。或者把当前的actionPerformed()用另一个类封装.

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics