首页 > 其他分享 >MVP模式

MVP模式

时间:2024-04-09 21:59:40浏览次数:21  
标签:MVP String void connection 模式 wordsInfo statement public

1、创建数据库连接类:

package com.db.mvp;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
//数据库连接类
public class DatabaseManager {
    private static DatabaseManager instance;
    private Connection connection;

    private DatabaseManager() {
        // 私有构造函数,禁止外部直接创建实例
    }

    public static synchronized DatabaseManager getInstance() {
        if (instance == null) {
            instance = new DatabaseManager();
        }
        return instance;
    }

    public Connection getConnection() throws SQLException {
        if (connection == null || connection.isClosed()) {
            // 数据库连接配置
            String url = "jdbc:mysql://localhost:3306/test_data";
            String username = "root";
            String password = "admin";

            connection = DriverManager.getConnection(url, username, password);
        }

        return connection;
    }
}

2、创建Model的实体类:

package com.db.mvp;
//实体类
public class WordsInfo {
    private int id;
    private String engName;
    private String chiVal;
    private String lastUsedTime;
    private int usedTimes;
    private String createdTime;
    private int priority;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getEngName() {
        return engName;
    }

    public void setEngName(String engName) {
        this.engName = engName;
    }

    public String getChiVal() {
        return chiVal;
    }

    public void setChiVal(String chiVal) {
        this.chiVal = chiVal;
    }

    public String getLastUsedTime() {
        return lastUsedTime;
    }

    public void setLastUsedTime(String lastUsedTime) {
        this.lastUsedTime = lastUsedTime;
    }

    public int getUsedTimes() {
        return usedTimes;
    }

    public void setUsedTimes(int usedTimes) {
        this.usedTimes = usedTimes;
    }

    public String getCreatedTime() {
        return createdTime;
    }

    public void setCreatedTime(String createdTime) {
        this.createdTime = createdTime;
    }

    public int getPriority() {
        return priority;
    }

    public void setPriority(int priority) {
        this.priority = priority;
    }
}

3、创建Model类:

package com.db.mvp;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import com.db.daomodule.DatabaseManager;
//Model层
public class WordsInfoModel {

	private Connection connection;
    public List<WordsInfo> getAllWordsInfo() {
        List<WordsInfo> wordsInfoList = new ArrayList<>();

        try {
        	connection = DatabaseManager.getInstance().getConnection();
            Statement statement = connection.createStatement();
            String sql = "SELECT * FROM words_info";
            ResultSet resultSet = statement.executeQuery(sql);

            while (resultSet.next()) {
                WordsInfo wordsInfo = new WordsInfo();
                wordsInfo.setId(resultSet.getInt("id"));
                wordsInfo.setEngName(resultSet.getString("eng_name"));
                wordsInfo.setChiVal(resultSet.getString("chi_val"));
                wordsInfo.setLastUsedTime(resultSet.getString("last_used_time"));
                wordsInfo.setUsedTimes(resultSet.getInt("used_times"));
                wordsInfo.setCreatedTime(resultSet.getString("created_time"));
                wordsInfo.setPriority(resultSet.getInt("priority"));
                wordsInfoList.add(wordsInfo);
            }

            resultSet.close();
            statement.close();
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return wordsInfoList;
    }

    public void insertWordsInfo(WordsInfo wordsInfo) {
        try {
            connection = DatabaseManager.getInstance().getConnection();
            String sql = "INSERT INTO words_info (eng_name, chi_val, last_used_time, used_times, created_time, priority) VALUES (?, ?, ?, ?, ?, ?)";
            PreparedStatement statement = connection.prepareStatement(sql);
            statement.setString(1, wordsInfo.getEngName());
            statement.setString(2, wordsInfo.getChiVal());
            statement.setString(3, wordsInfo.getLastUsedTime());
            statement.setInt(4, wordsInfo.getUsedTimes());
            statement.setString(5, wordsInfo.getCreatedTime());
            statement.setInt(6, wordsInfo.getPriority());
            statement.executeUpdate();
            statement.close();
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public void updateWordsInfo(WordsInfo wordsInfo) {
        try {
        	connection = DatabaseManager.getInstance().getConnection();
            String sql = "UPDATE words_info SET eng_name=?, chi_val=?, last_used_time=?, used_times=?, created_time=?, priority=? WHERE id=?";
            PreparedStatement statement = connection.prepareStatement(sql);
            statement.setString(1, wordsInfo.getEngName());
            statement.setString(2, wordsInfo.getChiVal());
            statement.setString(3, wordsInfo.getLastUsedTime());
            statement.setInt(4, wordsInfo.getUsedTimes());
            statement.setString(5, wordsInfo.getCreatedTime());
            statement.setInt(6, wordsInfo.getPriority());
            statement.setInt(7, wordsInfo.getId());
            statement.executeUpdate();
            statement.close();
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public void deleteWordsInfo(int id) {
        try {
        	connection = DatabaseManager.getInstance().getConnection();
            String sql = "DELETE FROM words_info WHERE id=?";
            PreparedStatement statement = connection.prepareStatement(sql);
            statement.setInt(1, id);
            statement.executeUpdate();
            statement.close();
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

4、创建Presenter层:

package com.db.mvp;
import java.util.List;
//Presenter层,同时持有Model对象和View对象。
public class WordsInfoPresenter {
    private WordsInfoModel model;
    private WordsInfoView view;

    public WordsInfoPresenter(WordsInfoView view) {
        this.view = view;
        model = new WordsInfoModel();
    }

    public void getAllWordsInfo() {
        List<WordsInfo> wordsInfoList = model.getAllWordsInfo();
        view.showWordsInfo(wordsInfoList);
    }

    public void insertWordsInfo(WordsInfo wordsInfo) {
        model.insertWordsInfo(wordsInfo);
        getAllWordsInfo(); // 刷新数据显示
    }

    public void updateWordsInfo(WordsInfo wordsInfo) {
        model.updateWordsInfo(wordsInfo);
        getAllWordsInfo(); // 刷新数据显示
    }

    public void deleteWordsInfo(int id) {
        model.deleteWordsInfo(id);
        getAllWordsInfo(); // 刷新数据显示
    }
}

5、创建View层:

package com.db.mvp;
import java.util.List;
//View层
public interface WordsInfoView {
	void getAllWordsInfo();
    void showWordsInfo(List<WordsInfo> wordsInfoList); 
}

6、创建UserView类实现View层接口,并进行测试:

package com.db.mvp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

//在MVP模式中,View层负责与用户交互和展示数据的内容,
//Presenter层负责处理业务逻辑并更新View层,
//Model层负责存储和管理数据。
//MVC与MVP模式的主要区别如下:
//职责分配:
//在MVC模式中,Model负责管理应用程序的数据和业务逻辑,View负责呈现数据给用户,Controller负责接受用户的输入并作出响应。
//在MVP模式中,Model同样负责管理数据和业务逻辑,View负责呈现数据给用户,
//Presenter作为中间人负责处理用户的输入,将输入与Model交互,并更新View。
//数据流:
//在MVC模式中,数据流是双向的。用户的输入通过Controller传递给Model进行处理,处理后的数据通过View呈现给用户。
//同时,Model也可以直接更新View。
//在MVP模式中,数据流是单向的。用户的输入通过View传递给Presenter进行处理,Presenter将数据交给Model进行处理,
//处理完成后,Model将结果交给Presenter,再由Presenter更新View。
//单向依赖:
//在MVC模式中,View依赖于Controller和Model,Controller依赖于View和Model,Model独立存在。
//在MVP模式中,View只依赖于Presenter,Presenter依赖于View和Model,Model独立存在。
//可测试性:
//在MVC模式中,由于Controller处理用户的输入和输出,因此可以很容易地对Controller进行单元测试。
//在MVP模式中,由于Presenter处理用户的输入和输出,因此可以很容易地对Presenter进行单元测试。
public class UserView implements WordsInfoView {
	
	private WordsInfoPresenter presenter;
//this关键字指的是当前类的实例,即Main类的实例。
//在Main类的构造方法中,实例化一个WordsInfoPresenter对象,并将this作为参数传递给它。
//这样做的目的是将WordsInfoView接口的实现传递给WordsInfoPresenter,
//以便在WordsInfoPresenter中调用WordsInfoView接口的方法。
//通过将this传递给WordsInfoPresenter,
//WordsInfoPresenter就可以调用Main类中实现的showWordsInfo方法,以便在控制台上显示单词信息。

	public UserView() {
		
		presenter = new WordsInfoPresenter(this);
	}

	public static void main(String[] args) {
		// 获取当前时间
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String currentTime = dateFormat.format(new Date());
		UserView userView = new UserView();
		 userView.getAllWordsInfo();

		WordsInfo wordsInfo = new WordsInfo();
		wordsInfo.setEngName("test");
		wordsInfo.setChiVal("测试");
		wordsInfo.setLastUsedTime(currentTime);
		wordsInfo.setUsedTimes(1);
		wordsInfo.setCreatedTime(currentTime);
		wordsInfo.setPriority(0);
        //presenter作为中间人负责处理用户的输入,将输入与Model交互,并更新View。
		userView.presenter.insertWordsInfo(wordsInfo);
		userView.presenter.getAllWordsInfo();

		userView.presenter.updateWordsInfo(wordsInfo);
		userView.presenter.getAllWordsInfo();

		userView.presenter.deleteWordsInfo(98);
		userView.presenter.getAllWordsInfo();
	}

	@Override
	public void showWordsInfo(List<WordsInfo> wordsInfoList) {
		
		for (WordsInfo wordsInfo : wordsInfoList) {
			
			System.out.println(wordsInfo.getEngName() + " - " + wordsInfo.getChiVal());
		}
	}

	@Override
	public void getAllWordsInfo() {

	}
}

标签:MVP,String,void,connection,模式,wordsInfo,statement,public
From: https://blog.csdn.net/wehpd/article/details/137568952

相关文章

  • 03-JAVA设计模式-适配器模式
    适配器模式设么是适配器模式它属于结构型模式,主要用于将一个类的接口转换成客户端所期望的另一种接口,从而使得原本由于接口不兼容而无法协同工作的类能够一起工作。适配器模式主要解决的是不兼容接口的问题。在软件开发中,经常会有这样的情况:我们有一个现有的类,它的接口(方......
  • 设计模式:责任链模式
    责任链模式是一种行为设计模式,允许你将请求沿着一条链传递,直到一个对象处理它为止。这种模式包含了一些处理对象,每个对象都包含逻辑来处理特定类型的命令或请求。如果一个对象不能处理该请求,它就会将请求传递给链中的下一个对象,如此类推。定义责任链模式通过定义一个对象......
  • UI自动化之设计模式--关键字驱动设计
    UI自动化测试框架:1.关键字驱动设计2.Excel数据驱动设计3.框架实现UI测试框架之设计模式:(一)设计模式介绍1.目前主流的测试框架的设计模式:*1.1关键字驱动:最核心,最传统的设计模式。基于关键字的形态来实现对业务的自动化执行。通过操作行为的封装或者是通过业务流程的封装......
  • 瑞_23种设计模式_备忘录模式(快照模式)
    文章目录1备忘录模式(MementoPattern)★1.1介绍1.2概述1.3备忘录模式的结构1.4备忘录模式的优缺点1.5备忘录模式的使用场景2案例一2.1需求2.2“白箱”备忘录模式2.3“黑箱”备忘录模式★★★3案例二3.1需求3.2代码实现......
  • git reset 的三种模式
    –soft:这种模式下,gitreset会移动HEAD指针到指定的提交,但不会更改暂存区或工作目录中的文件。这意味着您之前提交的更改将会被“取消”,但是这些更改仍然保留在暂存区中,您可以重新提交它们。–mixed:这是默认的模式,如果不指定任何模式,gitreset将使用这个模式。在......
  • SeleniumBase 录制模式-使用笔记(二)
    自动化福音(爬虫、办公、测试等)SeleniumBase使用笔记(二)SeleniumBase录制模式SeleniumBase提供录制模式,可以直接录制操作,并生成脚本。目录启用录制录制功能操作结束录制启用录制直接命令启用#new_recording.py=输出文件名#URL:路径sbasemkrecnew_recordi......
  • java设计模式回忆录
    java设计模式一.概念:在软件开发过程中的,经过验证的,在特定环境下重复发生特定问题的解决方案二.原则:OOP七项原则solid五项:功能的单一职责原则、开闭原则(便于扩展)、里氏替代原则(子类内代替父类)、接口隔离原则、依赖导致原则(依赖接口)迪米特原则(最小知道原则)、合成复用原则(用组合......
  • 《模版模式(极简c++)》
            本文章属于专栏-概述-《设计模式(极简c++版)》-CSDN博客       本章简要说明适配器模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。模式说明方案:模版模式定义了一个逻辑的骨架,将某些步骤推迟到子类中实现。父类定义了一个模版方......
  • 大话设计模式-简单工厂模式
    简单工厂模式面向对象和面向过程在大话设计模式中,为了引出简单工厂模式这一个话题,作者举了一个计算器的例子,通过不断的去优化计算器功能的实现代码,来帮助我们理解面向对象这一概念。首先是初始的代码,逻辑简单明了,是面向过程的方法去解决的,用计算机的方式去思考问题,直接判断输......
  • Spring之代理模式
    目录前言为什么需要代理呢?  JDK动态代理方法一:方法二: 通用代理对象实现 CGLIB代理1.什么是CGLIB呢?2.与JDK代理有什么区别呢?3.项目建立4.CGLIB常用API前言   在Spring框架中,代理是一种用于实现AOP(Aspect-OrientedProgramming,面向切面编程)和声明式......