java - 向导式图像处理App架构

标签 java image-processing architecture layer

我们正在构建一个向导式的图像处理软件。它由三层组成:GUI、Engine 和 Core_Algorithms。

向导:应用程序的每个“面板”都会要求用户执行某些操作。示例:第一个面板要求用户加载一些图像,下一个面板应用“种子区域生长”(SRG)算法并要求用户使用“魔棒工具”调整结果。

幕后发生的事情:所有算法都保存在“core”包中(并且完全独立于 GUI)。所有数据项(整个应用程序)都存储在单个类 (Data.java) 中。

Data.java

/*Stores ALL the necessary data items*/
public class Data{

    BufferedImage sourceImage, targetImage;
    BufferedImage srcGrownImg;
    Point srcPoint, tarPoint;//and many more data items for each algorithm and panel
}

另一个类(Engine.java,从 Data.java 扩展而来)使用这些数据项,运行适当的算法(如“core”包中的 SRG.java)并存储这些项(在内部)数据.java)。 向导的每个阶段都有相同的“Engine.java”实例,以便他们可以设置、运行算法并获取结果。

Engine.java

/*Runs algorithms inside "core"*/
public class Engine extends Data{
    public growSource()
    {
        SRG srgObj = new SRG(srcImg, srcSeeds);
        srcGrownImg = srgObj.runAndGetResult();
    }//and many more functions for each panel
}

问题:我们遇到的问题是“Data.java”和“Engine.java”太长。 Engine.java 由短小精悍的函数组成(3-4 行)(但整个向导使用的所有函数都存储在其中,因此使其非常长)。

问题:我需要有关如何分解代码的建议,以便“Data.java”和“Engine.java”变得更短。

最佳答案

您也许可以申请 adapter pattern调用公共(public)接口(interface)的不同实现,例如runAndGetResult()。结果是,有多少种实现 runAndGetResult() 的方法,就有多少具体实现。

这个example说明了单个抽象函数 eval() 的模式,但可以实现多个接口(interface)。一个class literal用作运行时类型标记来通过名称获取实现,但注册表也是可能的。

在 GUI 中,适配器可能会扩展 AbstractAction用于按钮、菜单项和其他接受 Action 的组件。对于离线处理,可以在 GUI 中组成适配器列表,然后在另一个线程中按规定顺序进行评估。

关于java - 向导式图像处理App架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11927804/

相关文章:

java - 关系数据库(H2、Java): How do I constrain a foreign key to NOT match another foreign key in the same table?

c++ - Opencv 调整大小取消/停止

c++ - 运行时检测系统架构 (x86/x64)

java - java.util.regex.Pattern 和 java.util.regex.Matcher 的设计有什么好处?

Liferay项目的架构?

java - 如何使用 JPA 映射同一父类(super class)的实体之间的关系?

java - 如何划分 Controller ?

java - 调用 readValue 时出现 Json NullPointerException

image-processing - 如何自动识别双峰直方图?

java - Android: Image Processing Library(替代openCV)