簡體   English   中英

為GUI創建一個通用接口,並由許多類實現

[英]Create one general interface for GUI, have it implemented by many classes

我正在編寫一個由3層(GUI,AppLogic,DatabaseQueries)組成的應用程序。 我希望我的GUI僅通過接口與AppLogic通信(因為我認為這是一種常見的做法)。 我想在AppLogic中只有一個接口來定義GUI可以調用的所有方法。 在我的AppLogic中,我希望有許多類來實現此接口。 因此,在我的Controller類中,我想創建一個實例來實現GUI可以用來調用AppLogic方法的接口。

public interface AppControllerInterface {

    public void m1();
    public void m2();
    public void m3();
    public void m4();
    public void m4();

}

public class M1 implements AppControllerInterface{

    public void m1(){};

}

public class M2 implements AppControllerInterface{

    public void m2(){};

}  

...and so on

因此,我想指定任意多個類,並僅創建一個實例,GUI控制器可以使用該實例調用其方法

AppControllerInterface appCI = new WHATHERE???();

我知道自己無法以自己的方式進行操作,但是也許有人知道如何解決該問題。 除此之外,是否有任何理由創建多個與其他層進行通信的接口?

在此先感謝您的幫助!

您應該研究Model-View-Controller(MVC)。 該模式應有助於您分離業務邏輯,數據庫和圖形元素。

引用馬丁·福勒的話:

“ MVC的核心是我所說的“分離表示”。“分離表示”背后的想法是對模擬我們對現實世界的感知的領域對象和作為屏幕上看到的GUI元素的顯示對象之間進行清晰的划分。域對象應該完全獨立並且可以在不參考表示的情況下工作,它們還應該能夠同時支持多個表示。”

下面演示了構建這些層的非常原始的示例:

DefaultController.java-運行表演。 創建視圖和模型。 實例化應用程序(通過main方法)。

public class DefaultController
{
    final DefaultView view = new DefaultView();
    final DefaultModel model = new DefaultModel();

    public JFrame init()
    {
        this.view.addButtonActionListener(new ButtonAction(this.view, this.model));
        return this.view;
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new DefaultController().init().setVisible(true);
            }
        });
    }
}

ButtonAction.java-未顯示,但將實現ActionListener並處理按鈕單擊。 它以模型和視圖為參數,因為它可以基於事件更新模型或視圖。 ButtonAction可以視為控制器的擴展。

DefaultModel.java-包含顯示的數據(例如,表單值,連接設置等)。

public class DefaultModel
{
    boolean buttonClicked = false;

    public void setButtonClicked(boolean clicked)
    {
        this.buttonClicked = clicked;
    }

    public boolean getButtonClicked()
    {
        return this.buttonClicked;
    }
}

DefaultView.java-實際顯示。 這可以是圖形的或基於文本的。 假定下面的示例包含一個標記為buttonJButton

public class DefaultView extends javax.swing.JFrame
{
    // ... auto generated code ...

    public void addButtonActionListener(ActionListener listener)
    {
        this.button.addActionListener(listener);
    }

    // Other view controls...
    public void setEnabledButton(boolean enabled)
    {
        this.button.setEnabled(enabled);
    }
}

現在, DefaultController為視圖注冊偵聽器。 它負責創建視圖和模型,並最終顯示視圖。 Controller僅通過DefaultView公共接口與視圖進行交互。 DefaultModel也是如此。 DefaultViewDefaultModel不會直接相互交互。

有很多不同的實現方法(您會發現每個人實現的方法都略有不同),並且可以在此處找到很好的教程。

MVC也有一些不同的變體(例如MVC,MVP,MVVM等),可以在Wikipedia上找到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM