模块化设计模式

时间:2015-03-25 16:46:38

标签: java design-patterns modularity

我开始使用Java绘制插件,比如使用贝塞尔曲线的连接器,但只是视觉效果。

example

然后我开始想知道如何使用输入和输出来制作某种模块化的东西。但是,我对如何实施它的决定感到非常困惑。让我们举个例如模块化合成器或Pure Data / MaxMSP概念,其中有模块,任何模块都有属性,输入和输出。

我想知道您是否知道我应该使用哪些关键字来搜索要阅读的内容。我需要一些关于这种界面的基本例子或抽象概念。有没有适合这个想法的设计模式?

1 个答案:

答案 0 :(得分:-1)

由于您要求提供关键字实时设计模式,过度OOP通常是实时应用程序的性能瓶颈,因为所有对象(我猜多态性到一些)程度)增加开销。

为什么要实时申请?您提供的图表看起来非常复杂, 您可以多次并行处理传入数据,将其拆分,合并等等。

图中的每个节点都会添加不同的效果并进行不同的计算,其中一些计算可能需要比其他计算更长的时间 - 这导致结论,为了获得统一的数据(声音),您必须保持数据同步。这不是一件轻而易举的事。


我猜其他一些关键词是:声音处理,过滤器。或者你可以问那些在该领域工作的公司。


抛开时间敏感性,我构建了一个小OOP示例, 也许这样的方法足以应对不那么复杂的场景

public class ConnectionCable implements Runnable, Closeable {
    private final InputLine in;
    private final OutputLine out;

    public ConnectionCable(InputLine in, OutputLine out) {
        this.in = in;
        this.out = out;
        // cable connects open lines and closes them upon connection
        if (in.isOpen() && out.isOpen()) {
            in.close();
            out.close();
        }
    }

    @Override
    public void run() {
        byte[] data = new byte[1024];
        // cable connects output line to input line
        while (out.read(data) > 0)
            in.write(data);
    }

    @Override
    public void close() throws IOException {
        in.open();
        out.open();
    }
}

interface Line {
    void open();
    void close();
    boolean isOpen();
    boolean isClosed();
}

interface InputLine extends Line {
    int write(byte[] data);
}

interface OutputLine extends Line {
    int read(byte[] data);
}