设计模式:Command

现在学习《Head First Design Pattern》,现在正看到第六章 the Command Pattern
我把书中的简单命令模式用D重写了一下,目的是大家共通学习!
[code]import std.stdio;

/**
* 本程序是学习《Head First Design Pattern》做得程序,思想属于Head First
* 网址<a href="http://www.headfirstlabs.com/">http://www.headfirstlabs.com/</a>
* Authors: Caoqi
* version: 0.001
* Date: April 15, 2007
*/
void SimpleCommand(){}


/**
* 命令的接口
*/
public interface Command {
void execute();
}
/**
* 不执行命令的实现
*/
class NoCommand:Command{
void execute() {}
}
/**
*
* 电灯类
*/
class Light {
//String strMessage="";
char[] strMessage="";
/**
* Params: strMessage = 消息
*
*/
this(char[] strMessage){
this.strMessage=strMessage;
}
/**
* 当电灯打开时进行显示
*/
void on(){
char[] str=this.strMessage;
str~=" on";
writefln(str);
}
/**
* 当电灯关闭的时候显示
*/
void off(){
char[] str=this.strMessage;
str~=" off";
writefln(str);

}
}
/**
* 开灯类
*/
class LightOnCommand:Command{
Light light;
this(Light light){
this.light=light;
}
/**
* 运行
*/
void execute() {
light.on();
}

}

/**
* 开灯类
*/
class LightOffCommand:Command{
Light light;
this(Light light){
this.light=light;
}
/**
* 运行
*/
void execute() {
light.off();
}

}

/**
* 简单远程控制类
*/
class SimpleRemoteControl {
Command slot;///命令变量
this() {
// TODO Auto-generated constructor stub

}
/**
* 设置要职行的命令
* Params: command = 要执行的命令
*
*/
void setCommand(Command command){
slot=command;
}
/**
* 执行命令
*/
void buttonWasPressed(){
slot.execute();
//return 1;
}
}


/**
* 主程序
*/
/++++++++++++++++++++++++

+ Our function.

+ Example:

+ --------------------------

+ import std.stdio;

+
+ void main(char[][] args) {
+ SimpleRemoteControl remote=new SimpleRemoteControl();
+ Light light=new Light("Light");
+ LightOnCommand lightOn=new LightOnCommand(light);

+ remote.setCommand(lightOn);
+ remote.buttonWasPressed();
+ }

+ --------------------------

+/
void main(char[][] args) {
SimpleRemoteControl remote=new SimpleRemoteControl();
Light light=new Light("Light");
LightOnCommand lightOn=new LightOnCommand(light);


remote.setCommand(lightOn);
remote.buttonWasPressed();

LightOffCommand lightOff=new LightOffCommand(light);
remote.setCommand(lightOff);
doStuff(&remote.buttonWasPressed);///此处练习delegate

}

void doStuff(void delegate() d) {
d() ;
}
[/code]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值