Skip to content

Commit 61c97ef

Browse files
committed
Merge pull request #9 from DeyuGoGo/command
add command pattern
2 parents 2ac10ee + dc4a70c commit 61c97ef

15 files changed

Lines changed: 260 additions & 1 deletion
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package commnad;
2+
3+
import util.Animal;
4+
5+
public class AnimalSleepCommand implements Command{
6+
7+
private Animal mAnimal ;
8+
public AnimalSleepCommand(Animal animal) {
9+
this.mAnimal = animal;
10+
}
11+
@Override
12+
public void excute() {
13+
mAnimal.Sleep();
14+
}
15+
@Override
16+
public void undo() {
17+
mAnimal.WakeUp();
18+
}
19+
20+
21+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package commnad;
2+
3+
import util.Animal;
4+
5+
public class AnimalWakeUpCommnad implements Command{
6+
private Animal mAnimal ;
7+
8+
public AnimalWakeUpCommnad(Animal animal) {
9+
this.mAnimal = animal;
10+
}
11+
@Override
12+
public void excute() {
13+
mAnimal.WakeUp();
14+
}
15+
@Override
16+
public void undo() {
17+
mAnimal.Sleep();
18+
}
19+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package commnad;
2+
3+
public interface Command {
4+
public void excute();
5+
public void undo();
6+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package commnad;
2+
3+
public class CommandController {
4+
private Command[] onCommnads ;
5+
private Command[] offCommnads ;
6+
private Command lastCommnad;
7+
private int commadCounts = 2;
8+
public CommandController(){
9+
onCommnads = new Command[commadCounts];
10+
offCommnads = new Command[commadCounts];
11+
for(int i = 0 ; i < commadCounts ; i++){
12+
onCommnads[i] = new NoCommnad();
13+
offCommnads[i] = new NoCommnad();
14+
}
15+
lastCommnad = new NoCommnad();
16+
}
17+
public void setCommnad(int slot , Command OnCommnad , Command offCommnad){
18+
onCommnads[slot] = OnCommnad;
19+
offCommnads[slot] = offCommnad;
20+
}
21+
public void onGetOnCommnad(int slot){
22+
Command findCommand = onCommnads[slot];
23+
findCommand.excute();
24+
lastCommnad =findCommand;
25+
}
26+
public void onGetOffCommnad(int slot){
27+
Command findCommand = offCommnads[slot];
28+
findCommand.excute();
29+
lastCommnad = findCommand;
30+
}
31+
public void onGetUndoCommand(){
32+
lastCommnad.undo();
33+
}
34+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package commnad;
2+
3+
import util.JavaLog;
4+
5+
public class DeyuScreen extends Screen{
6+
7+
@Override
8+
public void on() {
9+
openPower();
10+
openBlueLight();
11+
}
12+
13+
@Override
14+
public void off() {
15+
closePower();
16+
}
17+
private void openPower(){
18+
JavaLog.d("openPower");
19+
}
20+
private void closePower(){
21+
JavaLog.d("closePower");
22+
}
23+
private void openBlueLight(){
24+
JavaLog.d("open low blue light");
25+
}
26+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package commnad;
2+
3+
import util.Animal;
4+
import util.Deyu;
5+
6+
public class Go {
7+
public static void main(String[] args) {
8+
CommandController mCommandController = new CommandController();
9+
Animal mAnimal = new Deyu();
10+
Screen mScreen = new DeyuScreen();
11+
// Default no commnad
12+
mCommandController.onGetOnCommnad(0);
13+
mCommandController.onGetOffCommnad(1);
14+
mCommandController.onGetUndoCommand();
15+
// Set command to slot
16+
Command mAnimalWakeUpCommnad = new AnimalWakeUpCommnad(mAnimal);
17+
Command mScreenOnCommnad = new ScreenOnCommnad(mScreen);
18+
Command mAnimalSleepCommnad = new AnimalSleepCommand(mAnimal);
19+
Command mScreenOffCommnad = new ScreenOffCommnad(mScreen);
20+
mCommandController.setCommnad(0, mAnimalWakeUpCommnad , mAnimalSleepCommnad);
21+
mCommandController.setCommnad(1, mScreenOnCommnad , mScreenOffCommnad);
22+
mCommandController.onGetOnCommnad(0);
23+
mCommandController.onGetOffCommnad(1);
24+
mCommandController.onGetUndoCommand();
25+
// Set slot 0 to MacroCommand
26+
MacroCommand UpToLookScreanCommand = new MacroCommand(new Command[]{mAnimalWakeUpCommnad ,mScreenOnCommnad});
27+
MacroCommand InNightSleepCommand = new MacroCommand(new Command[]{mAnimalSleepCommnad , mScreenOffCommnad});
28+
mCommandController.setCommnad(0, UpToLookScreanCommand, InNightSleepCommand);
29+
mCommandController.onGetOnCommnad(0);
30+
mCommandController.onGetOffCommnad(0);
31+
32+
33+
34+
}
35+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package commnad;
2+
3+
public class MacroCommand implements Command{
4+
Command[] mCommands;
5+
public MacroCommand(Command[] commnads){
6+
mCommands = commnads;
7+
}
8+
@Override
9+
public void excute() {
10+
for(Command command : mCommands){
11+
command.excute();
12+
}
13+
}
14+
15+
@Override
16+
public void undo() {
17+
for(Command command : mCommands){
18+
command.undo();
19+
}
20+
}
21+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package commnad;
2+
3+
import util.JavaLog;
4+
5+
public class NoCommnad implements Command{
6+
7+
@Override
8+
public void excute() {
9+
JavaLog.d("No commnad to exctue");
10+
}
11+
12+
@Override
13+
public void undo() {
14+
JavaLog.d("No commnad to undo");
15+
}
16+
17+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
##命令模式
2+
____
3+
命令模式:將請求封裝成物件,以便使用不同的請求,佇列,或者日誌,參數化其他物件。命令模式也支援可恢復的作業。
4+
5+
可以把一堆要做的事包裝成command物件,放到陣列中一個一個做,把要做的是包裝同一種執行方法,像是go , do , run ,excute讓接受這些command的控制器可以簡單地去告訴該做事的人做事,就像是員工聽到”上班"就會去做他們份內的事,你可以在對的時間叫他們上班也可以一個一個叫(command Q),而不用知道上班實際內容為何。
6+
____
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package commnad;
2+
3+
public abstract class Screen {
4+
public abstract void on();
5+
public abstract void off();
6+
}

0 commit comments

Comments
 (0)