我正在寻找 java 中已开发项目的设计模式
im looking design pattern for developed project in java
它是一个 java mysql 应用程序,我将连接字符串放入 Connect.java 并从 Registration.java 调用它,那是哪种设计模式??
Connect.java
import java.sql.*;
import javax.swing.*;
public class Connect {
Connection con=null;
public static Connection ConnectDB(){
try{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hms_db","root","1474514745");
return con;
}catch(ClassNotFoundException | SQLException e){
JOptionPane.showMessageDialog(null, e);
return null;
}
}
}
Registration.java
con=Connect.ConnectDB();
con=Connect.ConnectDB();
Statement stmt;
stmt= con.createStatement();
String sql1="Select PatientID from PatientRegistration where PatientID= '" + txtPatientID.getText() + "'";
rs=stmt.executeQuery(sql1);
if(rs.next()){
JOptionPane.showMessageDialog( this, "Patient ID already exists","Error", JOptionPane.ERROR_MESSAGE);
txtPatientID.setText("");
txtPatientID.requestDefaultFocus();
return;
}
String sql= "";
pst=con.prepareStatement(sql);
pst.execute();
JOptionPane.showMessageDialog(this,"Successfully Registered","Patient",JOptionPane.INFORMATION_MESSAGE);
btnSave.setEnabled(false);
}
我认为你最好使用 Thread safe Singleton
,这是建立数据库连接和处理 SQL 的
的最佳方式
命令模式
也就是Command Pattern。这种模式背后的想法是允许传递功能。一个典型的命令 class 包含一个简单的方法,execute。例如:
public interface Command {
public void execute();
}
public class MyCommand implements Command {
public void execute() {
System.out.println("This is the output from MyCommand");
}
}
当您不确定 运行 时需要什么功能时,这很有用,因此您可以创建一个命令池并根据需要 select 它们,通常是通过一些外部配置。
此模式的另一个动机是它允许您在动态数据结构中将命令链接在一起,从而使您可以非常轻松地实现 "undo" 功能。显然,这会在我们的示例中创建对 revert()
方法的需求。
工厂模式
也是Factory Pattern。此模式允许您从调用对象的 classes 中抽象出对象创建的细节。在您的情况下,您不希望数据库连接详细信息的内部知识散布在整个应用程序中,因此您将其包装在 Factory 方法中,以便它在您需要时简单地生成一个连接对象。
备注
您的代码中存在 SQL 注入漏洞。这将允许用户在您的数据库中插入他们自己的 SQL 和 运行 未经授权的查询。
这样做会在您的应用程序中引入一个名为 "Global State" 的概念。这通常是不希望的。相反,我建议使用依赖注入框架将此对象注入到您的 classes 中。这样,没有代码需要了解您的数据库细节;它全部存储在配置文件中。
它是一个 java mysql 应用程序,我将连接字符串放入 Connect.java 并从 Registration.java 调用它,那是哪种设计模式??
Connect.java
import java.sql.*;
import javax.swing.*;
public class Connect {
Connection con=null;
public static Connection ConnectDB(){
try{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hms_db","root","1474514745");
return con;
}catch(ClassNotFoundException | SQLException e){
JOptionPane.showMessageDialog(null, e);
return null;
}
}
}
Registration.java
con=Connect.ConnectDB();
con=Connect.ConnectDB();
Statement stmt;
stmt= con.createStatement();
String sql1="Select PatientID from PatientRegistration where PatientID= '" + txtPatientID.getText() + "'";
rs=stmt.executeQuery(sql1);
if(rs.next()){
JOptionPane.showMessageDialog( this, "Patient ID already exists","Error", JOptionPane.ERROR_MESSAGE);
txtPatientID.setText("");
txtPatientID.requestDefaultFocus();
return;
}
String sql= "";
pst=con.prepareStatement(sql);
pst.execute();
JOptionPane.showMessageDialog(this,"Successfully Registered","Patient",JOptionPane.INFORMATION_MESSAGE);
btnSave.setEnabled(false);
}
我认为你最好使用 Thread safe Singleton
,这是建立数据库连接和处理 SQL 的
命令模式
也就是Command Pattern。这种模式背后的想法是允许传递功能。一个典型的命令 class 包含一个简单的方法,execute。例如:
public interface Command {
public void execute();
}
public class MyCommand implements Command {
public void execute() {
System.out.println("This is the output from MyCommand");
}
}
当您不确定 运行 时需要什么功能时,这很有用,因此您可以创建一个命令池并根据需要 select 它们,通常是通过一些外部配置。
此模式的另一个动机是它允许您在动态数据结构中将命令链接在一起,从而使您可以非常轻松地实现 "undo" 功能。显然,这会在我们的示例中创建对 revert()
方法的需求。
工厂模式
也是Factory Pattern。此模式允许您从调用对象的 classes 中抽象出对象创建的细节。在您的情况下,您不希望数据库连接详细信息的内部知识散布在整个应用程序中,因此您将其包装在 Factory 方法中,以便它在您需要时简单地生成一个连接对象。
备注
您的代码中存在 SQL 注入漏洞。这将允许用户在您的数据库中插入他们自己的 SQL 和 运行 未经授权的查询。
这样做会在您的应用程序中引入一个名为 "Global State" 的概念。这通常是不希望的。相反,我建议使用依赖注入框架将此对象注入到您的 classes 中。这样,没有代码需要了解您的数据库细节;它全部存储在配置文件中。