命令模式小试(二)

2014-11-23 21:59:28 · 作者: · 浏览: 1
21 // 执行
22 @Override
23 public void execute()
24 {
25 System.out.println("-----------------------写命令!内容为:"+content);
26 oldPos = screen.getPos();
27 oldScreenContent = screen.getScreenContent();
28 // 屏幕追加新内容
29 screen.insert(content);
30 // 屏幕刷新输出
31 screen.outPut();
32 }
33
34 // 恢复
35 @Override
36 public void recover()
37 {
38 System.out.println("-----------------------写命令!撤销内容为:"+content);
39 screen.setScreenContent(oldScreenContent);
40 screen.setPos(oldPos);
41 // 屏幕刷新输出
42 screen.outPut();
43 }
44
45 }
复制代码
可以看到,这个命令持有的属性包括输入的内容、输入前光标位置、输入前屏幕的内容和输入的屏幕。
4、同样的,我们可以构建一个移动光标的命令,如下:
复制代码
1 //移动光标命令
2 public class MoveCursorCommand implements Command {
3
4 //移动光标前光标位置
5 private int oldPos;
6 //移动光标后光标位置
7 private int currentPos;
8
9 private Screen screen = Screen.getInstance();
10
11 public void setScreen(Screen screen)
12 {
13 this.screen = screen;
14 }
15
16 public MoveCursorCommand(int currentPos)
17 {
18 this.currentPos = currentPos;
19 }
20
21 @Override
22 public void execute()
23 {
24 System.out.println("-----------------------移动光标命令,光标移动至" + currentPos);
25 oldPos = screen.getPos();
26 screen.setPos(currentPos);
27 screen.outPut();
28 }
29
30 @Override
31 public void recover()
32 {
33 System.out.println("-----------------------移动光标命令,恢复光标至" + oldPos);
34 screen.setPos(oldPos);
35 screen.outPut();
36 }
37
38 }
复制代码
可以看到,这个命令持有的属性包括移动前光标的位置、移动后光标的位置,还有输出的屏幕。
5、接下来构建一个删除的命令,如下:
复制代码
1 public class DeleteCommand implements Command {
2
3 //要删除的长度
4 private int deleteLength;
5 //删除前屏幕内容
6 private String oldScreenContent;
7 //删除前光标的位置
8 private int oldPos;
9 private Screen screen = Screen.getInstance();
10
11 public void setScreen(Screen screen)
12 {
13 this.screen = screen;
14 }
15
16 //构造方法,传入要删除的长度
17 public DeleteCommand(int deleteLength)
18 {
19 this.deleteLength = deleteLength;
20 }
21
22 // 默认删除一格
23 public DeleteCommand()
24 {
25 this(1);
26 }
27
28 @Override
29 public void execute()
30 {
31 System.out.println("-----------------------删除命令!删除"+deleteLength+"个字符!");
32 oldPos = screen.getPos();
33 oldScreenContent = screen.getScreenContent();
34 // 如果删除长度大于当前光标位置,删除光标前所有内容
35 if (deleteLength >= screen.getPos())
36 {
37 screen.setScreenContent(screen.getScreenContent().substring(screen.getPos()));
38 // 否则
39 }
40 else
41 {
42 String newContent = screen.getScreenContent().substring(screen.getPos()) + screen.getScreenContent().substring(0, screen.getPos() - deleteLength);
43 screen.setScreenContent(newContent);
44 }
45 screen.outPut();
46 }
47
48 @Override
49 public void recover()
50 {
51 System.out.println("-----------------------删除命令!恢复所删除的"+dele