天天看小說

第186章

小A:“命令模式的適用哪些環(huán)境?”

大B:“1、需要抽象出待執(zhí)行的動作,然後以參數(shù)的形式提供出來——類似於過程設計中的回調機制。而命令模式正是回調機制的一個面向對象的替代品。2、在不同的時刻指定、排列和執(zhí)行請求。一個命令對象可以有與初始請求無關的生存期。3、需要支持取消操作。4、支持修改日誌功能。這樣當系統(tǒng)崩潰時,這些修改可以被重做一遍。5、需要支持事務操作。”

在此寫了7個java類來描述說明Command設計模式的實現(xiàn)方式;

1、Control.java命令控制者對象類

2、Tv.java命令接收者對象類

3、Command.java命令接口類

4、CommandChannel.java頻道切換命令類

5、CommandOff.java關機命令類

6、CommandOn.java開機命令類

7、CommandTest.java帶有main方法的測試類(命令發(fā)送者)

……1、Control.java

packagemand;

//命令控制者

publicclassControl{

privateCommandonCommand,offCommand,changeChannel;

publicControl(Commandon,Commandoff,Commandchannel){

onCommand=on;

offCommand=off;

changeChannel=channel;

}

publicvoidturnOn(){

onCommand.execute();

}

publicvoidturnOff(){

offCommand.execute();

}

publicvoidchangeChannel(){

changeChannel.execute();

}

}

……1end

……2、Tv.java

packagemand;

//命令接收者

publicclassTv{

publicintcurrentChannel=0;

publicvoidturnOn(){

System.out.println(“Thetelevisinoison.”);

}

publicvoidturnOff(){

System.out.println(“Thetelevisionisoff.”);

}

publicvoidchangeChannel(intchannel){

this.currentChannel=channel;

System.out.println(“NowTVchannelis”+channel);

}

}

……2end

……3、Command.java

packagemand;

//命令接口

publicinterfaceCommand{

voidexecute();

}

……3end

……4、CommandChannel.java

packagemand;

//頻道切換命令

publicclassCommandChannelimplementsCommand{

privateTvmyTv;

privateintchannel;

publicCommandChannel(Tvtv,intchannel){

myTv=tv;

this.channel=channel;

}

publicvoidexecute(){

myTv.changeChannel(channel);

}

}

……4end

……5、CommandOff.java

packagemand;

//關機命令

publicclassCommandOffimplementsCommand{

privateTvmyTv;

publicCommandOff(Tvtv){

myTv=tv;

}

publicvoidexecute(){

myTv.turnOff();

}

}

……5end

……6、CommandOn.java

packagemand;

//開機命令

publicclassCommandOnimplementsCommand{

privateTvmyTv;

publicCommandOn(Tvtv){

myTv=tv;

}

publicvoidexecute(){

myTv.turnOn();

}

}

……6end

……7、CommandTest.java

packagemand;

//命令發(fā)送者

publicclassCommandTest{

publicstaticvoidmain(String[]args){

//命令接收者

TvmyTv=newTv();

//開機命令

CommandOnon=newCommandOn(myTv);

//關機命令

CommandOffoff=newCommandOff(myTv);

//頻道切換命令

CommandChannelchannel=newCommandChannel(myTv,2);

//命令控制對象

Controlcontrol=newControl(on,off,channel);

//開機

control.turnOn();

//切換頻道

control.changeChannel();

//關機

control.turnOff();

}

}

……7end

第205章第87章第28章第35章第167章第167章第110章第225章第3章第20章第197章第107章第20章第17章第98章第12章第111章第220章第198章第131章第192章第122章第45章第98章第197章第112章第140章第157章第38章第121章第155章第201章第205章第146章第221章第148章第10章第71章第21章第141章第56章第103章第200章第33章第25章第102章第71章第100章第79章第65章第33章第17章第171章第184章第34章第128章第65章第68章第17章第124章第101章第184章第12章第95章第91章第228章第9章第124章第132章第53章第66章第51章第197章第10章第2章第6章第210章第200章第61章第104章第128章第148章第84章第215章第57章第223章第30章第168章第126章第146章第219章第95章第144章第56章第220章第34章第129章第3章第167章
第205章第87章第28章第35章第167章第167章第110章第225章第3章第20章第197章第107章第20章第17章第98章第12章第111章第220章第198章第131章第192章第122章第45章第98章第197章第112章第140章第157章第38章第121章第155章第201章第205章第146章第221章第148章第10章第71章第21章第141章第56章第103章第200章第33章第25章第102章第71章第100章第79章第65章第33章第17章第171章第184章第34章第128章第65章第68章第17章第124章第101章第184章第12章第95章第91章第228章第9章第124章第132章第53章第66章第51章第197章第10章第2章第6章第210章第200章第61章第104章第128章第148章第84章第215章第57章第223章第30章第168章第126章第146章第219章第95章第144章第56章第220章第34章第129章第3章第167章
主站蜘蛛池模板: 沙坪坝区| 镶黄旗| 江陵县| 平邑县| 基隆市| 博野县| 枣庄市| 大邑县| 马山县| 桐梓县| 化德县| 沾化县| 玉林市| 平乐县| 晴隆县| 北流市| 瑞金市| 华宁县| 德昌县| 九龙坡区| 洱源县| 称多县| 武邑县| 邮箱| 安化县| 克山县| 呼伦贝尔市| 铁力市| 凌源市| 泾阳县| 来凤县| 西丰县| 夹江县| 乐安县| 汾阳市| 舞钢市| 堆龙德庆县| 临夏市| 石景山区| 汤原县| 南昌市|