先定义一个用户管理系统的接口,写出我们需要实现的方法,接口的定义一般有两种:
1.I加上接口名字 例如:IUserManger
2.接口名字加上Impl 例如:UserMangerImpl
package com.openlab.day15.users;
public interface IUserManger {
public void addUser(User user);
public void addUser(int position, User user);
public void delUser(User user);
public void delUser(String username);
public void updateUser(User user);
public User load(String username);
public User[] list();
}
然后我们需要定义一个用户类User,里面需要有属性,构造方法 get set方法和toString方法
package com.openlab.day15.users;
public class User {
private String username;
private String password;
private String nickname;
private int age;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public User() {
}
public User(String username, String password, String nickname, int age) {
super();
this.username = username;
this.password = password;
this.nickname = nickname;
this.age = age;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + ", nickname=" + nickname + ", age=" + age
+ "]";
}
}
在写一个用户管理类UserManager去实现接口中的所有函数
package com.openlab.day15.users;
import java.util.Arrays;
public class UserManager implements IUserManger {
private User[] users;
public int capacity;
private int nums;
public UserManager() {
this.capacity = 10;
this.users = new User[this.capacity];
this.nums = 0;
}
public UserManager(int capacity) {
this.capacity = capacity;
this.users = new User[this.capacity];
this.nums = 0;
}
@Override
public void addUser(User user) {
// 先判断是否已经存满了
if(this.isFull()) {
// 扩容
this.grow();
}
// 判断用户名称是否重复
if (existsUser(user.getUsername())) {
throw new UserException("对不起,用户名称重复了");
}
// 添加用户
this.users[nums++] = user;
System.out.println("用户添加成功!!");
}
private boolean existsUser(String username) {
for (int i = 0; i < nums; i++) {
if (this.users[i].getUsername().equals(username)) {
return true;
}
}
return false;
}
private void grow() {
// 扩容
this.capacity = this.capacity + (this.capacity >> 1); // 1.5�?
this.users = Arrays.copyOf(users, capacity);
System.out.println("扩容成功…");
}
private boolean isFull() {
if (this.nums >= this.capacity) {
return true;
}
return false;
}
@Override
public void delUser(User user) {
this.delUser(user.getUsername());
}
@Override
public void delUser(String username) {
int index = findIndexByUsername(username);
if (index < 0 || index >= nums) {
throw new UserException("对不起,要删除的用户不存在!�?");
}
// 怎么删除�?
for (int i = index + 1; i < nums; i++) {
this.users[i - 1] = this.users[i];
}
this.nums--;
}
private int findIndexByUsername(String username) {
for (int i = 0; i < nums; i++) {
if (this.users[i].getUsername().equals(username)) {
return i;
}
}
return -1;
}
@Override
public void updateUser(User user) {
int index = findIndexByUsername(user.getUsername());
User t_user = this.users[index];
t_user.setAge(user.getAge());
t_user.setPassword(user.getPassword());
t_user.setNickname(user.getNickname());
this.users[index] = t_user;
}
@Override
public User load(String username) {
int index = findIndexByUsername(username);
if (index < 0 || index >= nums) {
throw new UserException("对不起,要删除的用户不存在!�?");
}
return this.users[index];
}
@Override
public User[] list() {
return Arrays.copyOf(users, nums);
}
@Override
public void addUser(int position, User user) {
// 先判断是否已经存满了
if(!this.isFull()) {
// 扩容
this.grow();
}
// 判断用户名称是否重复
if (existsUser(user.getUsername())) {
throw new UserException("对不起,用户名称重复了�?��??");
}
for (int i = nums; i > position; i--) {
this.users[i] = this.users[i - 1];
}
this.users[position] = user;
this.nums++;
}
public int size() {
return nums;
}
}
其中,在实现某些功能时会产生异常,我们又自定义了一个异常类UserException
package com.openlab.day15.users;
public class UserException extends RuntimeException {
private static final long serialVersionUID = 440170458144780021L;
public UserException() {
super();
}
public UserException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
public UserException(String message, Throwable cause) {
super(message, cause);
}
public UserException(String message) {
super(message);
}
public UserException(Throwable cause) {
super(cause);
}
}
最后我们写一个测试类,去测试我们所写的用户管理系统。
package com.openlab.day15.users;
public class TestUser {
public static void main(String[] args) {
UserManager um = new UserManager();
um.addUser(new User("swk", "123", "aa", 800));
um.addUser(new User("zbj", "123", "bb", 800));
um.addUser(new User("ss", "123", "cc", 800));
um.addUser(new User("ts", "123", "dd", 800));
um.addUser(new User("rl", "123", "ee", 800));
um.addUser(new User("tanghuang", "123", "aa?", 800));
um.addUser(new User("yanwang3", "123", "bb", 800));
um.addUser(new User("yanwang4", "123", "hh", 800));
um.addUser(new User("yanwang5", "123", "jj", 800));
um.addUser(new User("yanwang6", "123", "vv", 800));
um.addUser(new User("yanwang7", "123", "nn", 800));
um.addUser(new User("yanwang7", "123", "nn", 800));
User[] users = um.list();
for (User u :users) {
System.out.println(u);
}
System.out.println(um.capacity);
System.out.println(um.size());
}
}
通过这次写用户管理界面,让我对面向对象的知识又加深了了解,但是还存在很多不足,在写的过程当中还是有许多的问题,这个时候我会去看老师的录播解决问题,也就是说对代码的实现还是有些不熟悉,比如不知道该如何定义一个异常类,Arrays.copyof的使用,还有在指定位置添加一个用户的代码实现。