考虑以下Java类:

public class GenericActionService {

    public void runAction(int actionNo) {

        .... (some stuff)

        runActionCode(actionNo);

        .... (some more stuff)
    }

    protected void runActionCode(int actionNo) {
        switch (actionNo) {
            case 100:
                doSomeGenericAction();
                break;
            ....

            default:
                throw new IllegalArgumentException("Invalid Action!");
        }
    }
}

并继承子类:
public class SpecificActionService extends GenericActionService {

    protected void runActionCode(int actionNo) {
        switch (actionNo) {
            case 1000:
               doSomeSpecificAction();
               break;
            ....

            default:
                super.runActionCode(actionNo);
                break;
        }
    }
}

现在,我不必担心这是否是特别好的设计,并且这些类是高度虚构的。

我想知道的是,您如何用某种图表表示这种设计?可以使用UML序列图表示吗?如果不是,应该使用哪种类型的图表?

特别是,当某人在runAction()实例上调用SpecificActionService方法时,我想绘制流程/序列图。

例如,考虑在runAction(1000)上调用SpecificActionService时的执行流程。我希望该图显示以下内容:
  • 调用SpecificActionService.runAction(1000)
  • GenericActionService.runAction()中运行一些代码
  • 调用SpecificActionService.runActionCode(1000)之前
  • 调用GenericActionService.runActionCode(1000)
  • 执行动作
  • 返回SpecificActionService.runActionCode(1000)之前
  • 返回GenericActionService.runAction(1000)
  • 返回原始调用方
  • 之前,要在其中运行更多代码

    问题是有些人认为这是“现代意大利面条代码”,尤其是在涉及这种继承结构时似乎并没有“明白”的经理,所以我想记录一下这种流程,以便他们理解。

    给那些为我画一幅漂亮图画的人加分。 :-)

    最佳答案

    特别是,我想绘制流程/ 序列

    因此,我将使用序列图。这可以显示对象如何一起工作。它没有显示继承结构以及如何编写类,但是您还可以稍后添加类图。

    这是一张花哨的简单图像,看起来如何:
    java - 如何以图解方式表示覆盖的方法-LMLPHP

    还有plantuml源代码,如果这还不够好,并且您想尝试一下:)。

    otherObject->SpecificActionService:runActionCode(1000)
    SpecificActionService->SpecificActionService:doSomeSpecificAction()
    
    otherObject->SpecificActionService:runActionCode(100)
    SpecificActionService->GenericActionService :runActionCode(100)
    GenericActionService->GenericActionService:doSomeGenericAction()
    

    10-07 12:24