美文网首页
State Pattern

State Pattern

作者: 杨志聪 | 来源:发表于2024-06-04 09:39 被阅读0次

要解决的问题

开发一个画板(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

State Pattern UML

相关文章

网友评论

      本文标题:State Pattern

      本文链接:https://www.haomeiwen.com/subject/nakyqjtx.html