体验模式的乐趣(一)—— Command模式
2005-01-08 23:53
351 查看
模式是什么?说实在的,对于模式,我了解得很少。但是,我知道,模式是用来解决软件设计问题的,是用来增加软件设计的灵活性和可维护性的,总之,它应该是程序员经过大量开发工作之后,对于解决问题的经验总结;模式不是用来生搬硬套的,也不是拿来故弄玄虚的,它是用来解决问题,从而让我们更加享受编码的乐趣。我无意直接去讲解什么模式,因为我还没有那样的实力,我能够讲的就只有模式给我带来的顿悟了。咦,怎么文不对题了呢?呵呵,有了顿悟,难道还不是莫大的乐趣吗?闲话少说,言归正传。
首先,让我们先来看一段代码:
如果你有写过Java GUI的程序,一定会对以上的代码很熟悉。这段小代码实现的功能也很简单,就是通过点击按钮去改变窗口的背景颜色。大家在看这段代码的时候,有没有不爽的感觉呢?是的,就是这里了。为了使得窗口上的按钮能够响应鼠标或者是键盘的事件,我们都必须为每个按钮增加相应的ActionListener。如果每个button对应Click事件有迥异的处理,那么构建不同的ActionListener也是无可厚非的,但是,如果按下button,所做的事情很类似呢?譬如以上代码中,两个按钮的功能就很类似,一个是让背景变成红色,一个则是蓝色而已。那么,我们是不是应该将这些共同点提取出来,以减少代码的重复呢?接着就是第二个版本的程序了,使用CommonActionListener去替代原有的两个ActionListener:
class RedButton extends JButton implements Command public class CommonActionListener implements ActionListener public class MainFrame extends JFrame public MainFrame() JPanel panel = new JPanel();
panel.setLayout(new FlowLayout());
JButton blueButton = new BlueButton("Blue", panel);
JButton redButton = new RedButton("Red", panel);
panel.add(blueButton);
panel.add(redButton);
getContentPane().add(panel);
setSize(300, 100);
setVisible(true);
}
public static void main(String[] args) MainFrame frame = new MainFrame();
}
} (MainFrame.java)
以上的代码正是使用Command模式,对于ActionListener而言,它只是知道调用execute方法,而这个方法对于每一个button都是适用的,就像是命令(Command)一样,而真正的处理则放到了每个特定的button中。就像一位指挥官对着士兵们喊出Action,接着士兵们就去行动了,而指挥官并不需要知道士兵们怎么去做事情,因为指挥官知道士兵们都能做好事情,这些士兵都是服从命令的(实现了Command接口)。需要说明的一点是,在这里由于两个button的功能比较类似,这样组织代码所带来的好处并不是非常突出,大家可以考虑一下,如果button的功能截然不同的情况。
首先,让我们先来看一段代码:
如果你有写过Java GUI的程序,一定会对以上的代码很熟悉。这段小代码实现的功能也很简单,就是通过点击按钮去改变窗口的背景颜色。大家在看这段代码的时候,有没有不爽的感觉呢?是的,就是这里了。为了使得窗口上的按钮能够响应鼠标或者是键盘的事件,我们都必须为每个按钮增加相应的ActionListener。如果每个button对应Click事件有迥异的处理,那么构建不同的ActionListener也是无可厚非的,但是,如果按下button,所做的事情很类似呢?譬如以上代码中,两个按钮的功能就很类似,一个是让背景变成红色,一个则是蓝色而已。那么,我们是不是应该将这些共同点提取出来,以减少代码的重复呢?接着就是第二个版本的程序了,使用CommonActionListener去替代原有的两个ActionListener:
class RedButton extends JButton implements Command public class CommonActionListener implements ActionListener public class MainFrame extends JFrame public MainFrame() JPanel panel = new JPanel();
panel.setLayout(new FlowLayout());
JButton blueButton = new BlueButton("Blue", panel);
JButton redButton = new RedButton("Red", panel);
panel.add(blueButton);
panel.add(redButton);
getContentPane().add(panel);
setSize(300, 100);
setVisible(true);
}
public static void main(String[] args) MainFrame frame = new MainFrame();
}
} (MainFrame.java)
以上的代码正是使用Command模式,对于ActionListener而言,它只是知道调用execute方法,而这个方法对于每一个button都是适用的,就像是命令(Command)一样,而真正的处理则放到了每个特定的button中。就像一位指挥官对着士兵们喊出Action,接着士兵们就去行动了,而指挥官并不需要知道士兵们怎么去做事情,因为指挥官知道士兵们都能做好事情,这些士兵都是服从命令的(实现了Command接口)。需要说明的一点是,在这里由于两个button的功能比较类似,这样组织代码所带来的好处并不是非常突出,大家可以考虑一下,如果button的功能截然不同的情况。
相关文章推荐
- 体验模式的乐趣(二)—— 连接池与Decorator模式
- 【设计模式攻略】行为型模式之Command模式
- 译文:如何成为用户体验思维模式塑造者?
- Win10新增节电模式功能 笔记本电脑实际体验
- 用户体验:产品逻辑与商业模式
- 使用HTML5,CSS3和jQuery来增强网站的用户体验和使用乐趣
- 设计模式简单代码之Command模式(皇帝圣旨篇)
- 设计模式 command模式
- 体验结对开发的乐趣(4)--(首尾相连的一维数组求最大子数组和的问题)
- [GoF设计模式]抽象工厂模式和Command模式的C++实现
- 网站瀑布流真实体验,最近网络流行瀑布流布局模式
- 设计模式学习笔记(十四)—Command模式
- 在开发中体验设计模式
- 《修炼Java开发技术 在架构中体验设计模式和算法之美》 - 书摘精要
- 什么让网站设计出了问题 浅谈用户体验的“反面模式”
- 用Python做2048游戏 网易云课堂配套实验课。通过GUI来体验编程的乐趣。
- 线上幽灵:世界头号黑客米特尼克自传(体验头号黑客传奇人生,洞悉头号黑客思维模式!启明,绿盟,安天,安全宝,百度,腾讯,阿里……众安全专家一致推荐!)
- 周鸿祎:做产品体验先把自己切换到二傻子模式
- 设计模式之7 command模式和state模式,调停者模式,门面模式
- 行为模式之Command模式