我工作的那点事--学习《设计模式》实例应用(Command模式)

好长时间没有学习设计模式了,主要是最近一直在忙德国的一个需求,现在终于可以休息下了,不过下周又要开始新的需求了。唉,不断的项目,不停的工作。

现在闲下来 回头看看设计模式,发现我们的工作模式,其实可以用Command的模式实现的,我们都是按bossCommand办事的,呵呵。 [@more@]

1.下面先讲讲我们的工作模式吧:

首先,德国那边boss提出要求,然后发给德国的经理,经理按照boss的意思,形成具体的需求样式,然后将这些样式发给我们,我们按照需求完成任务。

Boss----------&gtmanager-------àdeveloper

%E6%96%B0%E5%BB%BA%20BMP%20%E5%9B%BE%E5%83%8F.bmp

2.看看设计模式中对Command的定义吧:

书上对Command的定义过于复杂,个人的理解是这样的:就是将一些操作封装成command命令,每个命令中含有(execute),然后发给接受者,接受者不管command的类型或者内容,只要打开command命令,然后安装它的意图执行(execute)就可以了。

安装以上的理解,一个Command模式应该包括以下部分:

1. Command:

2. Client:创建一个命令,并且设定它的接受者

3. invoker:要求执行这个命令

4. Receiver:接到命令,并且按照执行。

他们之间的静态图如下:

%E6%96%B0%E5%BB%BA%20BMP%20%E5%9B%BE%E5%83%8F%20(2).bmp

[Command模式类图出自:wikimedia.org]

3.对照这个模式,就很容易将我的工作模式用这个模式实现了,下面看看整个过程吧:

很明显,我工作中的几个角色如下:

1.Command:

Requirement: 这里就是各种需求了。

2.Client:创建一个命令,并且设定它的接受者

Boss:Boss的作用

3.invoker

Manager: 根据老板的意思形成命令,并交给developer 开发

4.Receiver:接到命令,并且按照执行。

Developer: 得到需求后,找到需求的入口,然后按照这个要求一步步完成。

%E6%96%B0%E5%BB%BA%20BMP%20%E5%9B%BE%E5%83%8F%20(3).bmp

1. Boss 类:

public class Boss {

String order;//用于产生命令

Manager manager;//指定命令的接受者

public Manager getReceiver() {

return manager;

}

public void setReceiver(Manager manager) {

this.manager = manager;

}

public String getOrder() {

return order;

}

public void setOrder(String order) {

this.order = order;

}

public void orderCommand(){

manager.setOrder(order);//manager下达命令

}

}

2. Manager类:

public class Manager {

String order;

Developer developer;

Requirement requirement = null;

public String getOrder() {

return order;

}

//用于接受命令

public void setOrder(String order) {

this.order = order;

}

//根据boss的命令 产生需求。

public void setRequirement(){

if(order.equals("A")){

requirement = new RequirementA();

}else if(order.equals("B")){

requirement = new RequirementB();

}

}

//通知让developer工作

public void invoker(){

developer.setRequirement(requirement);//告诉developer具体需求

developer.action();//唤起developer

}

public Developer getDeveloper() {

return developer;

}

public void setDeveloper(Developer developer) {

this.developer = developer;

}

}

3. Developer类:

public class Developer {

Requirement requirement = null;

public Requirement getRequirement() {

return requirement;

}

//得到需求。

public void setRequirement(Requirement requirement) {

this.requirement = requirement;

}

public void action(){

requirement.execute();//只要按照要求做就可以了。

}

}

4. Requirment类:

public interface Requirement {

public void execute();

}

//需求A

public class RequirementA implements Requirement {

private void stepFirst(){

System.out.println("stepFirst runs");

}

private void stepSecond(){

System.out.println("stepSecond runs");

}

public void execute(){

System.out.println("now operate requirementA");

//先执行第一步,然后再执行第二步。

stepFirst();

stepSecond();

}

}

public class RequirementB implements Requirement {

private void stepFirst(){

System.out.println("stepFirst runs");

}

private void stepSecond(){

System.out.println("stepSecond runs");

}

public void execute(){

System.out.println("now operate requirementB");

//不同于第一步

stepSecond();

stepFirst();

}

}

5. 看看测试过程吧:

这里我用的是junit4 具体使用请参考我的另一篇文章(junit4快速入门)

import org.junit.Test;

import org.junit.Before;

import org.junit.After;

public class WorkflowTest {

String order = "";

Boss boss;

Developer developer;

Manager manager;

Requirement requirement;

@Before

public void init(){

boss = new Boss();

developer= new Developer();

manager = new Manager();

}

@Test

public void runRequirmentA(){

order = "A";

//boss的工作

boss.setOrder(order);

boss.setReceiver(manager);

boss.orderCommand();

//manager的工作

manager.setDeveloper(developer);

manager.setRequirement();

manager.invoker();

}

@Test

public void runRequirmentB(){

order = "B";

//boss的工作

boss.setOrder(order);

boss.setReceiver(manager);

boss.orderCommand();

//manager的工作

manager.setDeveloper(developer);

manager.setRequirement();

manager.invoker();

}

@After

public void destory(){

boss = null;

developer= null;

manager = null;

}

}

6. 输出结果:

now operate requirementA

stepFirst runs

stepSecond runs

now operate requirementB

stepSecond runs

stepFirst runs

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9879276/viewspace-993567/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9879276/viewspace-993567/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《软件秘笈:设计模式那点》郑阿奇(编者) -电子工业出版社 在第1章软件设计模式概述后,从第2章到第24章诠释23个软件设计模式。 1 设计模式概述 1.1 计算机软件的发展现状 1.2 引入设计模式的必要性 1.3 软件设计遵循的基本原则 1.3.1 高内聚、低耦合 1.3.2 面向抽象编程 1.3.3 多用组合少用继承 1.3.4 “开-闭”原则 1.4 设计模式概述 1.4.1 什么是设计模式 1.4.2 为什么需要设计模式 1.4.3 如何正确应用设计模式 1.5 设计模式的分类 1.5.1 创建型模式 1.5.2 结构型模式 1.5.3 行为型模式 1.6 学会归纳和总结 第一部分 创建型模式 2 曹操献刀:工厂方法模式 2.1 三国故之曹操献刀 2.2 模式定义 2.3 故中的模式分析 2.3.1 故中的角色 2.3.2 抽象化分析方法 2.3.3 工厂方法模式的静态建模 2.4 故的工厂方法模式实现 2.4.1 建立产品 2.4.2 建立工厂 2.4.3 故情节的历史重现 2.4.4 用八星宝刀来考验模式 2.5 设计原则 2.6 使用场合 2.7 本章要点 3 肯德基:抽象工厂模式 3.1 发生在肯德基的故 3.2 模式定义 3.3 故中的模式分析 3.3.1 故中的角色 3.3.2 抽象化分析 3.3.3 抽象工厂模式的静态建模 3.4 故的抽象工厂模式实现 3.4.1 抽象食物的建立 3.4.2 建立不同食物的抽象基类 3.4.3 创建具体的食物 3.4.4 建立工厂 3.4.5 创建客户类 3.4.6 故情节的展现 3.5 设计原则 3.6 使用场合 3.7 本章要点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值