Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MVP的具体代码示例_Java_Design Patterns_Mvp - Fatal编程技术网

Java MVP的具体代码示例

Java MVP的具体代码示例,java,design-patterns,mvp,Java,Design Patterns,Mvp,有人能提供一个具体的(实际的Java代码)MVP实例吗 这将包括以下3种类型的类,以及它们如何调用彼此的方法来实现模式和处理/响应客户端响应: 模型-某种价值对象(VO) 视图-表示或生成用户界面 演示者-业务逻辑 MVP是我最喜欢的创建UI的设计模式 MVP和MVC的最大区别在于如何处理视图 在MVC中,控制器操纵视图,负责如何在视图中渲染用户动作和模型的部分。这意味着控制器和视图具有“紧密耦合” 在MVP中,演示者负责用户任务,模型在演示者和视图之间共享。因此,视图根据模型呈现UI,有时

有人能提供一个具体的(实际的Java代码)MVP实例吗

这将包括以下3种类型的类,以及它们如何调用彼此的方法来实现模式和处理/响应客户端响应:

  • 模型-某种价值对象(VO)
  • 视图-表示或生成用户界面
  • 演示者-业务逻辑

MVP是我最喜欢的创建UI的设计模式

MVP和MVC的最大区别在于如何处理视图

  • 在MVC中,控制器操纵视图,负责如何在视图中渲染用户动作和模型的部分。这意味着控制器和视图具有“紧密耦合”
  • 在MVP中,演示者负责用户任务,模型在演示者和视图之间共享。因此,视图根据模型呈现UI,有时视图可以从演示者调用操作。演示者和视图可以有一个定义的接口契约,使它们“松散耦合”。例如,您可以为JavaSwingUI创建一个视图,为JavaFXUI创建另一个视图。或者,如果与数据源的连接发生更改,则只需更新演示者即可
MVP的编程有多种风格

在形式上,包括为设计模式的每个元素创建接口

/*-- file: Application.java --*/
import javax.swing.JOptionPane;

/**
 *
 * @author danLeon
 */
interface LoginModel {

    String getUser();

    void setUser(String user);
}

class MyLoginModel implements LoginModel {

    String user;

    @Override
    public String getUser() {
        return user;
    }

    @Override
    public void setUser(String user) {
        this.user = user;
    }
}

interface LoginView {

    LoginPresenter getPresenter();

    void setPresenter(LoginPresenter loginPresenter);

    void updateModelFromView();

    void updateViewFromModel();

    void open();

    void close();

    void userRejected();
}

class MyLoginView extends javax.swing.JFrame implements LoginView {

    private LoginPresenter loginPresenter;

    /**
     * Creates new form MyLoginView
     */
    public MyLoginView() {
        initComponents();
    }


    @SuppressWarnings("unchecked")
    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        jLabel1 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setBounds(new java.awt.Rectangle(0, 0, 0, 0));
        java.awt.GridBagLayout layout = new java.awt.GridBagLayout();
        layout.columnWidths = new int[] {0, 7, 0};
        layout.rowHeights = new int[] {0, 7, 0, 7, 0};
        getContentPane().setLayout(layout);

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel1.setText("Welcome");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.gridwidth = 3;
        getContentPane().add(jLabel1, gridBagConstraints);

        jTextField1.setColumns(13);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 2;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
        getContentPane().add(jTextField1, gridBagConstraints);

        jLabel2.setText("User");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 2;
        getContentPane().add(jLabel2, gridBagConstraints);

        jButton1.setText("Login");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 2;
        gridBagConstraints.gridy = 4;
        getContentPane().add(jButton1, gridBagConstraints);

        pack();
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        getPresenter().login();
    }

    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JTextField jTextField1;


    @Override
    public void updateModelFromView() {
        getPresenter().getModel().setUser(jTextField1.getText());
    }

    @Override
    public void updateViewFromModel() {
        jTextField1.setText(getPresenter().getModel().getUser());
    }

    @Override
    public void open() {
        setVisible(true);
        jTextField1.selectAll();
        jTextField1.requestFocus();
    }

    @Override
    public void close() {
        dispose();
    }

    @Override
    public void userRejected() {
        jLabel1.setText("Try again!");
        jTextField1.selectAll();
        jTextField1.requestFocus();
    }

    @Override
    public LoginPresenter getPresenter() {
        return loginPresenter;
    }

    @Override
    public void setPresenter(LoginPresenter loginPresenter) {
        this.loginPresenter = loginPresenter;
    }
}

interface LoginPresenter {

    LoginModel getModel();

    void setModel(LoginModel loginModel);

    LoginView getView();

    void setView(LoginView loginView);

    void setOnLogin(Runnable onLogin);

    void run();

    void login();
}

class MyLoginPresenter implements LoginPresenter {

    LoginModel loginModel;
    LoginView loginView;
    private Runnable onLogin;

    @Override
    public LoginModel getModel() {
        return loginModel;
    }

    @Override
    public void setModel(LoginModel loginModel) {
        this.loginModel = loginModel;
    }

    @Override
    public LoginView getView() {
        return loginView;
    }

    @Override
    public void setView(LoginView loginView) {
        this.loginView = loginView;
    }

    @Override
    public void setOnLogin(Runnable onLogin) {
        this.onLogin = onLogin;
    }

    @Override
    public void run() {
        loginModel.setUser("previousUser");
        loginView.setPresenter(this);
        loginView.updateViewFromModel();
        loginView.open();
    }

    @Override
    public void login() {
        loginView.updateModelFromView();
        if (loginModel.getUser().equalsIgnoreCase("root")) {
            loginView.close();
            loginView.setPresenter(null);// for memory sanity. 
            onLogin.run();
        } else {
            loginView.userRejected();
        }
    }
}

public class Application {

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                LoginModel loginModel = new MyLoginModel();
                LoginPresenter loginPresenter = new MyLoginPresenter();
                loginPresenter.setModel(loginModel);
                LoginView loginView = new MyLoginView();
                loginPresenter.setView(loginView);
                loginPresenter.setOnLogin(new Runnable() {

                    @Override
                    public void run() {
                        JOptionPane.showMessageDialog(null, "Welcome user!");
                    }
                });
                loginPresenter.run();
            }
        });
    }
}

所以不这样做;这不是一个讨论或一般教程论坛。请阅读和。另外,你的问题可以通过谷歌搜索很容易地得到回答。请跳过这里,但MVP是MVC的另一个名称吗?@Esko有区别:@Jim-这是一个特定的问题(信不信由你)!!猜猜在谷歌搜索MVP时,会出现多少具体的、特定于Java的代码示例?没有@Esko-我不是专家,但已经离开学校三年了,我开始意识到我们在软件工程I课上学到的很多“理论”东西只是…*理论*!这些博士都很聪明,而且很擅长(事实上,这就是他们的谋生之道!)在他们的白皮书中提出三个字母缩写的模式,但正如我们看到的MVC、MVP、MVVM和谁知道还有什么……当你揭开面纱时,一切都只是“皇帝的新衣”我敢打赌MVC/MVP/MVVM都首先出现在一些博士的博士论文中……它们听起来很棒,但形式重于实质。这意味着控制器和视图具有“紧密耦合”。谢谢这是我对MVC感到疑惑的一件事。也很高兴您发布了一个非常清晰的MVP Java示例;不是应显示在视图中的行。此外,updateModelFromView和updateViewFromModel不是MVP中视图的预期方法。演示者应持有所有演示文稿登录。视图不应该以任何方式访问模型。在视图中使用模型(如JDOI)是否可以接受?我想你已经在MVC和MVP之间切换了,看看这个: