设计模式之命令模式

描述:软件开发中有个很经典的问题,开发的流程首先是需求工程师跟客户沟通整理出需求之后,将需求抛给软件工程师,然后软件工程师找相应的UI设计师进行相应的界面修改。命令模式说的是客户直接找一个代表(项目经理)进行整个项目沟通,项目经理直接将项目抛给组内人员(需求工程师,软件工程师及UI设计师),项目经理只负责整个项目的把控,具体细节开发就交给组内人员开发。这里的Invoker与Command的关系是聚合的关系,好比工程师是归项目经理管理的。

UML类图如下:


Invoker:代表的是项目经理

Client: 代表客户

Receiver:代表具体功能的开发者(需求工程师,软件工程师,UI设计师)


具体测试代码如下:

1、命令接口类

package com.java.command;

public abstract class Command {
	
	protected RequirementGroup rg = new RequirementGroup();
	protected CodeGroup cg = new CodeGroup();
	protected DesignGroup dg = new DesignGroup();
	
	public void exec(){};
	
}

2、命令接口实现类

package com.java.command;

public class CodeCommand extends Command {
	
	@Override
	public void exec() {
		super.exec();
		cg.delete();
		cg.add();
		cg.modify();
	}
	
}
package com.java.command;

public class DesignCommand extends Command {
	
	@Override
	public void exec() {
		super.exec();
		dg.delete();
		dg.add();
		dg.modify();
	}
	
}
package com.java.command;

public class RequirementCommand extends Command {
	
	@Override
	public void exec() {
		super.exec();
		rg.delete();
		rg.add();
		rg.modify();
	}
	
}

3、Receiver的接口类

package com.java.command;

public interface Group {
	
	public void add();
	public void delete();
	public void modify();
	
}

4、Receiver接口实现类

package com.java.command;

public class DesignGroup implements Group {

	@Override
	public void add() {
		System.out.println("美工组增加页面...");
	}

	@Override
	public void delete() {
		System.out.println("美工组删除页面...");
	}	

	@Override
	public void modify() {
		System.out.println("美工组修改页面...");
	}

}
package com.java.command;

public class RequirementGroup implements Group {

	@Override
	public void add() {
		System.out.println("需求组增加需求...");
	}

	@Override
	public void delete() {
		System.out.println("需求组删除需求...");
	}

	@Override
	public void modify() {
		System.out.println("需求组修改需求...");
	}

}
package com.java.command;

public class CodeGroup implements Group {

	@Override
	public void add() {
		System.out.println("代码组增加功能代码...");
	}

	@Override
	public void delete() {
		System.out.println("代码组删除功能代码...");
	}

	@Override
	public void modify() {
		System.out.println("代码组修改功能代码...");
	}
	
}


5、项目经理类

package com.java.command;

public class Invoker {
	private Command command;
	
	public Invoker() {
		super();
	}

	public Invoker(Command command) {
		this.command = command;
	}

	public void setCommand(Command command) {
		this.command = command;
	}
	
	public void action(){
		System.out.println("命令模式开始执行...");
		command.exec();
		System.out.println("命令模式开始结束...");
	}
}

6、测试类

package com.java.command;

public class CommandTest {

	public static void main(String[] args) {
		
		RequirementCommand command = new RequirementCommand();
		Invoker invoder = new Invoker();
		invoder.setCommand(command);
		invoder.action();
		
	}

}


7、测试结果

命令模式开始执行...
需求组删除需求...
需求组增加需求...
需求组修改需求...
命令模式开始结束...





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值