要解决的问题
开发一个画板(Canvas)软件,鼠标选择不同的工具时,在画板上面就有不同的功能。例如选择选择工具,鼠标在画板上能选择目标,选择刷子工具,在画板上能画画。
代码
Tool
:
package com.cong.designpattern.state;
public interface Tool {
void mouseDown();
void mouseUp();
}
SelectionTool
:
package com.cong.designpattern.state;
public class SelectionTool implements Tool {
@Override
public void mouseDown() {
System.out.println("Arrow icon");
}
@Override
public void mouseUp() {
System.out.println("Select something");
}
}
BrushTool
:
package com.cong.designpattern.state;
public class BrushTool implements Tool {
@Override
public void mouseDown() {
System.out.println("Brush icon");
}
@Override
public void mouseUp() {
System.out.println("Draw a line");
}
}
Canvas
:
package com.cong.designpattern.state;
public class Canvas {
private Tool currentTool;
public void setCurrentTool(Tool currentTool) {
this.currentTool = currentTool;
}
public void mouseDown() {
if (currentTool != null) currentTool.mouseDown();
}
public void mouseUp() {
if (currentTool != null) currentTool.mouseUp();
}
}
Test code:
Canvas canvas = new Canvas();
canvas.setCurrentTool(new SelectionTool());
canvas.mouseDown();
canvas.mouseUp();
canvas.setCurrentTool(new BrushTool());
canvas.mouseDown();
canvas.mouseUp();
UML

网友评论