设计模式 实验一上

 

实验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();
    }
}

数据库文件:

 

SET NAMES utf8mb4;

SET FOREIGN_KEY_CHECKS = 0;

 

-- ----------------------------

-- Table structure for user_table

-- ----------------------------

DROP TABLE IF EXISTS `user_table`;

CREATE TABLE `user_table`  (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

  `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

  PRIMARY KEY (`id`) USING BTREE

) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

posted @ 2023-11-06 08:43  杳无音讯  阅读(12)  评论(0编辑  收藏  举报