设计模式 实验一上
实验1:UML与面向对象程序设计原则
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、掌握面向对象程序设计中类与类之间的关系以及对应的UML类图;
2、理解面向对象程序设计原则。
[实验任务一]:UML复习
阅读教材第一章复习UML,回答下述问题:
面向对象程序设计中类与类的关系都有哪几种?分别用类图实例说明。
1. 关联关系
表示一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法。子类可以继承父类的特征,同时可以添加新的特征或修改继承的特征。
LoginForm登陆界面中的注册按钮JButton
其它关联关系
(1) 双向关联,例如:顾客Customer与购买的商品之间的关联
(2) 单向关联,例如顾客类Customer与其地址Address的关联
(3) 自关联:与对象本身形成关联关系
(4) 多重性关联,例如,一个表单可以包含多个按钮
(5) 聚合关系,整体与部分的关系(部分可以脱离整体而存在)
(6) 组合关系,整体与部分的关系(共同生死)
2. 依赖关系(接口以及其实现)
表示一个类在某种程度上依赖另一个类,通常表现为一个类使用了另一个类的某些成员(如方法或属性)。
3. 泛化关系(继承)
示一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法。
[实验任务二]:单一职责原则
登录模块在实际项目开发中很常见,请按照教材28页(PPT49页)利用单一职责原则重构后的类图实现这一模块。
实验要求:
1. 源代码和对应的数据库文件
(1)DBUtil
package com.hua.main;
import java.sql.*;
import java.sql.SQLException;
public class DBUtil {
//返回数据库连接对象
public static Connection getConnection() throws SQLException {
String url="jdbc:mysql://localhost:3306/wjm";
String user="root";
String password="sqlsql";
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection conn=DriverManager.getConnection(url,user,password);
return conn;
}
}
(2) UserDAO
package com.hua.main;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class UserDAO {
public static boolean findUser(String userName,String userpassword)
{
String sql="select * from user where name ="+userName;
Connection connect = null;
try {
connect = DBUtil.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
Statement statement;
try {
statement = connect.createStatement();
ResultSet result = statement.executeQuery(sql);
if(result.next())
{
return true;
}
else
{
return false;
}
}
catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
}
(3) UserDAO
package com.hua.main;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
@SuppressWarnings("serial")
public class LoginForm extends JFrame implements ActionListener{
public static JTextField te1;
public static JLabel L1;
public static JPasswordField te2;
public static JLabel L2;
public static JButton B1;
public static JFrame frame;
UserDAO userdao=new UserDAO();
public void init( )
{
frame=new JFrame();
//点击关闭按钮的操作
L1=new JLabel("账号:");
te1=new JTextField(25);
L2=new JLabel("密码:");
te2=new JPasswordField(25);
B1=new JButton("登陆");
B1.addActionListener((ActionListener) this);
}
public void display( )
{
frame.setSize(300,300);
frame.setLayout(new FlowLayout());
frame.setTitle("登陆界面");
frame.add(L1);
frame.add(te1);
frame.add(L2);
frame.add(te2);
frame.add(B1);
frame.setVisible(true);
}
@SuppressWarnings("static-access")
public void actionPerformed(ActionEvent e) {
String username=te1.getText();
String password=String.valueOf(te2.getPassword());
JDialog frame1 = new JDialog();//构造一个新的JFrame,作为新窗口。
frame1.setBounds(// 让新窗口与SwingTest窗口示例错开50像素。
new Rectangle(
(int) frame.getBounds().getX() + 50,
(int) frame.getBounds().getY() + 50,
(int) frame.getBounds().getWidth(),
(int) frame.getBounds().getHeight()
)
);
JLabel jl = new JLabel();// 注意类名别写错了。
frame1.getContentPane().add(jl);
if(userdao.findUser(username, password))
{
jl.setText("登陆成功");
jl.setVerticalAlignment(JLabel.CENTER);
jl.setHorizontalAlignment(JLabel.CENTER);
frame1.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
frame1.setVisible(true);
}
else
{
jl.setText("登陆失败");
jl.setVerticalAlignment(JLabel.CENTER);
jl.setHorizontalAlignment(JLabel.CENTER);
frame1.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
frame1.setVisible(true);
}
}
}
(4) UserDAO
package com.hua.main;
public class MainClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
LoginForm loginform=new LoginForm( );
loginform.init();
loginform.display();
}
}
数据库文件: