State Pattern

2024-06-04  本文已影响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
上一篇 下一篇

猜你喜欢

热点阅读