java设计模式-----命令模式
来源:互联网 发布:c语言四则运算程序问题 编辑:程序博客网 时间:2024/05/17 02:40
java设计模式-----命令模式
对于命令模式,说简单点就是对于完成一件事,处理的行为,和具体的处理的方法的分离。假设:有个方法需要某个数组的数组元素,但是无法确定如何处理这些元素,需要在调用该方法时指定具体的处理行为。
对于这样的需求,我们应该把处理的行为作为参数传入,处理的行为编程实现就是一段代码,java 不支持给方法传入代码,但是它提供了接口,所以我们可以把处理的行为定义成接口:
//定义一个处理方法的接口
public interface Command {
void process(int [] target);
}
该接口只是定义了个方法但是没有方法体-----------还无法确定处理的行为,所以要定义处理数组的类在该类里定义处理方法的行为,由于处理的行为的不确定性,所以定义接口参数。
//通过接口作为参数实现了处理方法的类ProcessArray 和行为的分离,因为command只是一个接口,具体的行为还需要传入真正的command 对象,才可确定数组的行为,也就是实现command接口的类
public class ProcessArray {
public void process(int []target,Command cmd)
{
cmd.process(target);
}
}
//假若行为1是做加法
public class Commandtest1 implements Command
{
int a=5;
@Override
public void process(int[] target) {
// TODO Auto-generated method stub
for (int i = 0; i < target.length; i++) {
target[i]+=a;
}
for (int i : target) {
System.out.print(i+" ");
}
}
}
// 假若行为2是做减法
public class Commandtest2 implements Command
{
int a=5;
@Override
public void process(int[] target) {
// TODO Auto-generated method stub
for (int i = 0; i < target.length; i++) {
target[i]-=5;
}
for (int i : target) {
System.out.print(i+" ");
}
}
}
//定义主类
public class Commandtest2 implements Command
{
int a=5;
@Override
public void process(int[] target) {
// TODO Auto-generated method stub
for (int i = 0; i < target.length; i++) {
target[i]-=5;
}
for (int i : target) {
System.out.print(i+" ");
}
}
}
所以命令模式我个人觉得最彻底的理解就是,处理的具体的行为和方法的分离。和前面的工厂模式,他们都是面向接口的编程,在表面上来看他们的灵活习惯很强,但是仔细推敲,好像在具体产生实例的过程中还是存在逻辑的判 断,所以对于java而言解决方案,Spring框架提出了解决方案(利用泛型和映射),对于这个人还在学习中。。。
最后个人的某些方面理解不足,欢迎志同道合的人前来切磋!!
- java设计模式-命令模式
- java设计模式---命令模式
- java设计模式---命令模式
- 【java 设计模式】命令模式
- Java设计模式:命令模式
- java设计模式-----命令模式
- Java设计模式-命令模式
- java设计模式---命令模式
- Java设计模式--命令模式
- Java设计模式--命令模式
- JAVA设计模式-命令模式
- java设计模式,命令模式
- JAVA设计模式--命令模式
- Java设计模式-命令模式
- java设计模式-命令模式
- Java设计模式-命令模式
- JAVA设计模式-命令模式
- JAVA 设计模式 命令模式
- 关于C++初始化列表(摘自其他博客)
- Best Time to Buy and Sell Stock
- Servlet-Cookie详解
- POJ 3278 Catch That Cow[BFS]
- 17个新手常见Python运行时错误
- java设计模式-----命令模式
- 【AJAX进阶(二)】--异步模糊查询
- ARM-STM32-RTC/ADC
- Lucene-排序+高亮
- linux下调用库函数实现文件的读写
- struts2+spring+ibatis框架整合
- HDU 2897 邂逅明下
- 数据库中的行列转换
- Tiling_easy version 2501