Java 桌面版之Model层
来自CloudWiki
目录
Model层的作用
- M即model模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
客户端功能
客户端Model层的编写
新建类UserService
新建包service,在其中新建此类。
package service; import dao.*; import entity.*; //import exception.UserException; public class UserService { /** * 用户集类(用于存储用户 */ private UserDao userset = null; public UserService() { //这里根据实际情况,选择数据的实现类 //userset = new UserDaoArray(); userset = new UserDaoSQL(); } }
添加用户功能:addUser
/** * 用于向用户集添加用户 */ public void addUser(User user){ userset.addUser(user); System.out.println("用户 "+user.getName() +" 注册成功"); System.out.println(); }
用户登陆验证功能:login()
/** * 登录验证,判断用户名与密码是否一致 * * @param uid 用户输入的登录账号 * @param pwd 用户输入的登录密码 * @return 登录信息有效:返回用户对象,否则返回NULL */ public boolean login(String name, String pwd) { //用户名为空,密码为空 //try{ if(userset.search(name)==null){ //throw new UserException("用户 "+name+":该用户不存在"); System.out.println("用户 "+name+":该用户不存在"); return false; }else if(!userset.verify(name, pwd)){ //throw new UserException("用户 "+name+":用户名或密码错误"); System.out.println("用户 "+name+":用户名或密码错误"); return false; } System.out.println("用户 "+name+" 登陆成功!"); //}catch(UserException e){ //System.out.println(e.toString()); //return false; //} return true; }
在main方法中编写测试代码
public static void main(String[] args) { UserService us = new UserService(); User u1 = new User("王建","000000"); us.addUser(u1);; us.login("李建", "111111"); us.login("王建", "111111"); us.login("王建", "000000"); }
与View层、Dao层联调联试
在View层UserInfo类内部,进行如下操作
创建和绑定事件监听器
共有两个监听器:一个是登陆按钮的监听器,一个是重置按钮的监听器。
这两个监听器都以UserInfo类的内部类存在,都在UserInfo类里面。
LoginAction:
private class LoginAction implements ActionListener{ public LoginAction(){ } @Override public void actionPerformed(ActionEvent e) { // 获取用户输入的账号和密码 String uid = txtUserID.getText(); String pwd = new String(txtPassword.getPassword()); JOptionPane.showMessageDialog(null, uid+","+pwd, "信息", JOptionPane.INFORMATION_MESSAGE); } }
ResetAction:
private class ResetAction implements ActionListener{ public ResetAction(){ } @Override public void actionPerformed(ActionEvent e) { txtUserID.setText(""); txtPassword.setText(""); txtUserID.requestFocus(); } }
在UserInfo类的构造方法中,为两个按钮绑定事件监听器:
btnLogon.addActionListener(new LoginAction()); btnReset.addActionListener(new ResetAction());
测试:右击类UserInfo ,RUN AS -> JAVA APPLICATION:
点击登陆时,如图:
加入对service层的调用
在UserInfo的事件监听器LoginAction中,加入对service层的调用:
private class LoginAction implements ActionListener{ public LoginAction(){ } @Override public void actionPerformed(ActionEvent e) { // 获取用户输入的账号和密码 String uid = txtUserID.getText(); String pwd = new String(txtPassword.getPassword()); // 判断用户输入的账号和密码是否存在 UserService us = new UserService(); boolean success = us.login(uid, pwd); // 用户编号不存在 if (success == false) { JOptionPane.showMessageDialog(null, "登陆账号或密码不正确", "警告信息", JOptionPane.WARNING_MESSAGE); // 增加用户体验,选中文本框中的字,并获得焦点 txtUserID.requestFocus(); txtUserID.selectAll(); } else JOptionPane.showMessageDialog(null, "登陆成功", "信息", JOptionPane.INFORMATION_MESSAGE); } }
测试:右击类UserInfo ,RUN AS -> JAVA APPLICATION:
登录成功时,弹出成功界面,如图:
失败时,弹出失败界面,如图:
完整代码
package service; import dao.*; import entity.*; //import exception.UserException; public class UserService { /** * 用户集类(用于存储用户 */ private UserDao userset = null; public UserService() { userset = new UserDaoSQL(); } /** * 用于向用户集添加用户 */ public void addUser(User user){ userset.addUser(user); System.out.println("用户 "+user.getName() +" 注册成功"); System.out.println(); } /** * 登录验证,判断用户名与密码是否一致 * * @param uid 用户输入的登录账号 * @param pwd 用户输入的登录密码 * @return 登录信息有效:返回用户对象,否则返回NULL */ public boolean login(String name, String pwd) { //用户名为空,密码为空 //try{ if(userset.search(name)==null){ //throw new UserException("用户 "+name+":该用户不存在"); System.out.println("用户 "+name+":该用户不存在"); return false; }else if(!userset.verify(name, pwd)){ //throw new UserException("用户 "+name+":用户名或密码错误"); System.out.println("用户 "+name+":用户名或密码错误"); return false; } System.out.println("用户 "+name+" 登陆成功!"); //}catch(UserException e){ //System.out.println(e.toString()); //return false; //} return true; } public static void main(String[] args) { UserService us = new UserService(); User u1 = new User("王建","000000"); us.addUser(u1);; us.login("李建", "111111"); us.login("王建", "111111"); us.login("王建", "000000"); } }