专栏首页mySoul设计模式-行为型模式-命令模式
原创

设计模式-行为型模式-命令模式

设计模式-行为型模式-命令模式

基础

以一个MIS系统为栗子

MIS 管理信息系统(Management Information System,MIS)是一个以人为主导的,利用计算机硬件、软件和网络设备,进行信息的收集、传递、存储、加工、整理的系统,以提高组织的经营效率。

代码如下

public abstract class Group{
	// 甲乙双方公开办公,如果要和某个组讨论,要先找到这个组
	public abstract void find();
	// 要求增加功能
	public abstract void add();
	// 删除功能
	public abstract void delete();
	// 被要求修改功能
	public abstract void change();
	// 被要求给出变更计划
	public abstract void plan();
}

抽象类中的都是命令方式。

进行需求组

public class RequirementGroup extends Group{
	// 客户要求需求进行更改
	public void find(){
		
	}
	// 客户要求增加需求
	public void add(){
	}
	// 客户要求修改需求
	public void change(){
	}
	// 客户要求删除需求
	public void delete(){
	}
	// 客户要求给出变更计划
	public void plan(){
	}
}
// 美工组
public class PageGroup extends Group{
	// 找到美工组
	public void find(){
	}
	// 客户要求增加页面
	public void add(){
	}
	// 客户要求对现有界面修改
	public void change(){
	}
	// 客户要求删除页面
	public void delete(){
	}
	// 给出计划
	public void plan(){
	}
}
// 代码组
public class CodeGroup extends Group {
	// 客户要求过去谈
	public void find(){
	}
	// 客户要求增加功能
	public void add(){
	}
	// 客户要求修改功能
	public void change(){
	}
	// 客户要求删除功能
	public void delete(){
	}
	// 客户要求变更计划
	public void plan(){
	}
}

最后书写场景类

// 场景类
public class Client{
	public static void main(String[] args){
		// 客户找到需求要求谈需求进行修改
		Grop rg = new RequirementGroup();
		// 找到需求组
		rg.find();
		// 增加需求组
		rg.add();
		// 变更计划
		rg.plan();
	}
}

此时客户要求多一个界面

public class Client {
	public static void main(String[] args){
		Group pg = new PangeGroup();
		// 找到需求组
		pg.find();
		// 删除需求组
		pg.delete();
		// 需求变更
		pg.plan();
	}
}

变更

客户每次都要单独找一个,非常复杂,设置一个负责人,负责和客户和需求,美工之间的连接。

// 抽象出命令类
public abstract class Command{
	// 定义三个组,确保子类可以直接使用
	protected RequirementGroup rg = new RequirementGroup();	// 需求组
	protected PageGroup pg = new PageGroup();	// 美工组
	protected CodeGroup cg = new CodeGroup(); // 代码组
	public abstract void execute();	// 做什么事情
}

增加需求的命令

public class AddRequirementCommand extends  Command{
	// 增加一项需求命令
	public void execute(){
		// 找到需求组
		super.rg.find();
		// 增加一份需求
		super.rg.add();
		// 给出计划
		super.rg.plan();
	}
}

增加删除页面的命令

public class DeletePageCommand extends Command{
	public void execute(){
		// 找到页面组
		super.pg.find();
		// 删除页面
		super.rg.delete();
		// 给出计划
		super.rg.plan();
	}
}

最后再将这也命令封装,成一个负责人

public class invoker {
	// 命令
	private Command command;
	// 客户发出命令
	public void setCommand(Command command){
		this.command = command;
	}
	// 客户自行命令
	public void action(){
		this.command.execute();
	}
}

最后场景类如下

public class Client{
	public static void main(String[] args){
		// 定义接头人
		invoker xiaoSan = new Invoker();	// 接头人
		// 客户增加需求
		// 客户下命令
		Command command = new AddRequirementCommand();
		// 街头人收到命令
		xiaoSan.setCommand(command);
		// 街头人执行命令
		xiaoSan.action();
	}
}

继续更改

由于负责人的抽象类中声明了所有的,所以可以分离

代码如下

public abstract class Command {
	// 定义子类全局共享变量
	protected final Receiver receiver;
	// 实现类名需要接收
	public Command(Receiver _receiver){
		this.receiver = _receiver;
	}
	// 每个命令需要有执行
	public abstract void execute();
}

然后在Command中声明接收者。

通过构造函数指定

public class ConcreteCommand1 extends Command{
	// 声明自己默认接收者
	public ConcreteCommand1(){
		super(new ConcreteReciver1());
	}
	// 设置新的接受
	public ConcreteCommand1(Receiver _receiver){
		super(_receiver);
	}
	// 处理
	public void execute(){
		super.receiver.doSomething();
	}
}
// 声明场景
public class Client{
	public static void main(String[] args){
		invoker invoker = new invoker();
		// 定义要发送的命令
		Command command = new ConcreteCommand1();
		invoker.setCommand(command);
		invoker.action();
	}
}

总结

将需求封装成命令,然后再负责人当中封装,最后,需要的时候,直接调用负责人,将命令传入进去即可。

www.iming.info

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 设计模式 接口隔离原则

    接着,要进行更改了。对好看的定义,发生了改变,那么就应该改变PettyGirl中的内容,但是已经在接口中定义了。那么就有问题了。即,接口承担的内容过多导致

    mySoul
  • 设计模式 里氏替换原则

    在场景中,三毛需要什么枪支,就直接new 出一个枪支即可,然后其内通过抽象类获取到对象,然后对齐进行修饰

    mySoul
  • 访问者模式

    静态绑定,是重写的时候就断定要绑定那个,例如定义年轻演员的时候,重写的act方法,此时为静态绑定了KungFuRole,

    mySoul
  • 初探Java设计模式2:结构型模式(代理模式,适配器模式等)

    转自https://javadoop.com/post/design-pattern

    Java技术江湖
  • 初探Java设计模式2:结构型模式(代理模式,适配器模式等)

    转自https://javadoop.com/post/design-pattern

    Java技术江湖
  • 初探Java设计模式2:结构型模式(代理模式,适配器模式等)

    前面创建型模式介绍了创建对象的一些设计模式,这节介绍的结构型模式旨在通过改变代码结构来达到解耦的目的,使得我们的代码容易维护和扩展。

    黄小斜
  • 大神之路你必须了解的——Java 设计模式

    一直想写一篇介绍设计模式的文章,让读者可以很快看完,而且一看就懂,看懂就会用,同时不会将各个模式搞混。自认为本文还是写得不错的,花了不少心思来写这文章和做图,力...

    慕容千语
  • 初探Java设计模式3:一文了解Spring涉及到的9种设计模式

    本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看

    Java技术江湖
  • 初探Java设计模式5:一文了解Spring涉及到的9种设计模式

    本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看

    Java技术江湖
  • Java 23种设计模式全归纳 | 完结版

    设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。

    Jingbin

扫码关注云+社区

领取腾讯云代金券