`

java 设计模式学习笔记十二 command命令设计模式

阅读更多

command命令设计模式
类似于callback的功能,就是将所有事件的处理方法归并到一起,客户端不需要知道
具体处理代码。这样在以command中代码发生变化时,客户端不需要作修改


示例代码如下:


/**
* 命令设计模式接口
*
* @time 下午09:36:40
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public interface Command {
public abstract void execute();
}








/**
* 执行方式一
* @time 下午09:38:22
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class Engineer implements Command {


@Override
public void execute() {


}
}




/**
* 执行方式二
*
* @time 下午09:39:21
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class Politician implements Command {


@Override
public void execute() {


}
}




/**
* 执行方式三
*
* @time 下午09:38:51
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class Programmer implements Command {


@Override
public void execute() {


}
}






/**
* 测试命令设计模式
*
* @time 下午09:42:45
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
@SuppressWarnings("rawtypes")
public class TestCommand {
public static void main(String[] args) {
List queue = Producer.procudeRequests();
for (Iterator iterator = queue.iterator(); iterator.hasNext();)


{
((Command) iterator.next()).execute();
}
}
}




java 的swing中的菜单都是使用command模式,android中的许多监听也类似
/**
* 菜单
*
* @time 10:24:50 AM
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class Test_MentTest extends Frame {
private static final long serialVersionUID = 1L;
// 默认值
int n = 12;
String ko = "TimesRoman";
Color fColor = Color.red;
TextField textField = new TextField("TimeRoman");


/** ************************************************************* */
// 菜单工具条
MenuBar menuBar = new MenuBar();


// 菜单
Menu fontStyle = new Menu("字型"),//
fontSize = new Menu("字号"),//
fontColor = new Menu("颜色");//


// 菜单内容项
CheckboxMenuItem fStyle1 = new CheckboxMenuItem("TimesRoman"),//
fStyle2 = new CheckboxMenuItem("Courier"),//
fStyle3 = new CheckboxMenuItem("Helvetica"),//
fSize1 = new CheckboxMenuItem("10"),//
fSize2 = new CheckboxMenuItem("15"),//
fSize3 = new CheckboxMenuItem("20"),//
fColor1 = new CheckboxMenuItem("红色"),//
fColor2 = new CheckboxMenuItem("绿色"),//
fColor3 = new CheckboxMenuItem("蓝色");//


/** *****鼠标右键弹出菜单


************************************************** */
// 弹出式菜单
PopupMenu popupMenu = new PopupMenu();


// 弹出菜单项
MenuItem pp1, pp2, pp3;


/**
* 构造器
*/
private Test_MentTest() {
super("Test_MentTest");


setLayout(new FlowLayout()); // 流布局
setBackground(Color.orange);


// 添加菜单容项
fontStyle.add(fStyle1);
fontStyle.add(fStyle2);
fontStyle.add(fStyle3);
fontSize.add(fSize1);
fontSize.add(fSize2);
fontSize.add(fSize3);
fontColor.add(fColor1);
fontColor.add(fColor2);
fontColor.add(fColor3);


menuBar.add(fontStyle);
menuBar.add(fontSize);
menuBar.add(fontColor);


//
setMenuBar(menuBar);


popupMenu.add(pp1 = new MenuItem("灰色"));
pp1.addActionListener(new koActionListener());
popupMenu.add(pp2 = new MenuItem("青色"));
pp2.addActionListener(new koActionListener());
popupMenu.add(pp3 = new MenuItem("黄色"));
pp3.addActionListener(new koActionListener());


add(textField);
add(popupMenu);
// 设置鼠标事件
enableEvents(AWTEvent.MOUSE_EVENT_MASK);


// 初始化设置
fSize1.setState(true);
fColor1.setState(true);
setSize(200, 180);
setVisible(true);
addWindowListener(new koWindowListener());


// 菜单项添加监听
fStyle1.addItemListener(new koItemListener());
fStyle2.addItemListener(new koItemListener());
fStyle3.addItemListener(new koItemListener());
fSize1.addItemListener(new koItemListener());
fSize2.addItemListener(new koItemListener());
fSize3.addItemListener(new koItemListener());
fColor1.addItemListener(new koItemListener());
fColor2.addItemListener(new koItemListener());
fColor3.addItemListener(new koItemListener());
}


/**
* 应用入口
*
* @param args
*/
public static void main(String[] args) {
new Test_MentTest();
}


/**
* 自定义弹出菜单的单击监听
*/
class koActionListener implements ActionListener {


public void actionPerformed(ActionEvent e) {
if (e.getSource() == pp1) {
textField.setBackground(Color.gray);
} else if (e.getSource() == pp2) {
textField.setBackground(Color.cyan);
} else if (e.getSource() == pp3) {
textField.setBackground(Color.yellow);
}
}
}


/**
* 自定义菜单选项监听
*/
class koItemListener implements ItemListener {


public void itemStateChanged(ItemEvent e) {
if (e.getItemSelectable() == fStyle1) {
ko = fStyle1.getLabel();
fStyle2.setState(false);
fStyle3.setState(false);
}
if (e.getItemSelectable() == fStyle2) {
ko = fStyle2.getLabel();
fStyle1.setState(false);
fStyle3.setState(false);
}
if (e.getItemSelectable() == fStyle3) {
ko = fStyle3.getLabel();
fStyle1.setState(false);
fStyle2.setState(false);
}


if (e.getItemSelectable() == fSize1) {
n = Integer.parseInt(fSize1.getLabel());
fSize2.setState(false);
fSize3.setState(false);
}
if (e.getItemSelectable() == fSize2) {
n = Integer.parseInt(fSize2.getLabel());
fSize1.setState(false);
fSize3.setState(false);
}
if (e.getItemSelectable() == fSize3) {
n = Integer.parseInt(fSize3.getLabel());
fSize1.setState(false);
fSize2.setState(false);
}


if (e.getItemSelectable() == fColor1) {
fColor = Color.red;
fColor2.setState(false);
fColor3.setState(false);
}
if (e.getItemSelectable() == fColor2) {
fColor = Color.green;
fColor1.setState(false);
fColor3.setState(false);
}
if (e.getItemSelectable() == fColor3) {
fColor = Color.blue;
fColor1.setState(false);
fColor2.setState(false);
}
textField.setFont(new Font(ko, Font.PLAIN, n));
textField.setForeground(fColor);
textField.setText(ko);
}


}


/**
* 鼠标响应事件
*/
@Override
protected void processMouseEvent(MouseEvent e) {
// 是否为此平台的鼠标弹出事件
if (e.isPopupTrigger()) {
popupMenu.show(e.getComponent(), e.getX(), e.getY());
}
}


}


/**
* 自定义关闭窗体监听
*/
class koWindowListener extends WindowAdapter {


@Override
public void windowClosing(WindowEvent e) {
// 释放资源
e.getWindow().dispose();
System.exit(0);
}
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics