引用某大的文章:
我们常见的一种情况就是菜单命令,按钮监听。下面就举出一个常用的简单例子 :
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()用另一个类封装.