用Java设计一个包含三种设计模式一种体系结构的简单学生管理系统
时间: 2023-12-04 20:04:46 浏览: 173
Eclipse实现学生信息管理系统,优秀Java毕业设计,小白必看!
5星 · 资源好评率100%
好的,我为您设计了一个基于 Java 的简单学生管理系统,采用三种设计模式 + 一种体系结构,分别是:单例模式、工厂模式、观察者模式和三层架构。
1. 单例模式:用于创建唯一的系统配置对象,确保在整个系统中只有一个配置对象实例。代码如下:
```
public class Config {
private static Config instance;
private Config() {
// 私有构造函数,防止外部实例化
}
public static Config getInstance() {
if (instance == null) {
instance = new Config();
}
return instance;
}
// 配置属性
private String dbUrl = "jdbc:mysql://localhost:3306/student";
private String dbUser = "root";
private String dbPassword = "root";
// getter 和 setter 方法
public String getDbUrl() {
return dbUrl;
}
public void setDbUrl(String dbUrl) {
this.dbUrl = dbUrl;
}
public String getDbUser() {
return dbUser;
}
public void setDbUser(String dbUser) {
this.dbUser = dbUser;
}
public String getDbPassword() {
return dbPassword;
}
public void setDbPassword(String dbPassword) {
this.dbPassword = dbPassword;
}
}
```
2. 工厂模式:用于创建不同类型的实体类对象,方便系统扩展和维护。代码如下:
```
public interface StudentDao {
void add(Student student);
void deleteById(int id);
void update(Student student);
List<Student> findAll();
}
public class StudentDaoImpl implements StudentDao {
// 省略实现代码
}
public interface DaoFactory {
StudentDao createStudentDao();
}
public class JdbcDaoFactory implements DaoFactory {
private static final Config config = Config.getInstance();
@Override
public StudentDao createStudentDao() {
return new StudentDaoImpl(config.getDbUrl(), config.getDbUser(), config.getDbPassword());
}
}
```
3. 观察者模式:用于实现学生信息的发布和订阅功能,当学生信息发生变化时,系统会及时通知所有订阅者。代码如下:
```
public interface StudentObserver {
void update(Student student);
}
public class StudentSubject {
private List<StudentObserver> observers = new ArrayList<>();
public void attach(StudentObserver observer) {
observers.add(observer);
}
public void detach(StudentObserver observer) {
observers.remove(observer);
}
public void notify(Student student) {
for (StudentObserver observer : observers) {
observer.update(student);
}
}
}
```
4. 三层架构:将系统分为表示层、业务逻辑层和数据访问层三个模块,分别负责处理用户交互、处理业务逻辑和管理数据访问,使系统更加清晰、易于维护。代码如下:
```
// 表示层
public class StudentController {
private StudentService service = new StudentServiceImpl();
public void add(Student student) {
service.add(student);
}
public void deleteById(int id) {
service.deleteById(id);
}
public void update(Student student) {
service.update(student);
}
public List<Student> findAll() {
return service.findAll();
}
}
// 业务逻辑层
public interface StudentService {
void add(Student student);
void deleteById(int id);
void update(Student student);
List<Student> findAll();
}
public class StudentServiceImpl implements StudentService, StudentObserver {
private StudentDao dao = new JdbcDaoFactory().createStudentDao();
private StudentSubject subject = new StudentSubject();
public StudentServiceImpl() {
subject.attach(this);
}
@Override
public void add(Student student) {
dao.add(student);
subject.notify(student);
}
@Override
public void deleteById(int id) {
dao.deleteById(id);
}
@Override
public void update(Student student) {
dao.update(student);
subject.notify(student);
}
@Override
public List<Student> findAll() {
return dao.findAll();
}
@Override
public void update(Student student) {
System.out.println("学生信息发生变化:" + student);
}
}
// 数据访问层
public interface StudentDao {
void add(Student student);
void deleteById(int id);
void update(Student student);
List<Student> findAll();
}
public class StudentDaoImpl implements StudentDao {
private String dbUrl;
private String dbUser;
private String dbPassword;
public StudentDaoImpl(String dbUrl, String dbUser, String dbPassword) {
this.dbUrl = dbUrl;
this.dbUser = dbUser;
this.dbPassword = dbPassword;
}
@Override
public void add(Student student) {
// 省略 JDBC 操作代码
}
@Override
public void deleteById(int id) {
// 省略 JDBC 操作代码
}
@Override
public void update(Student student) {
// 省略 JDBC 操作代码
}
@Override
public List<Student> findAll() {
// 省略 JDBC 操作代码
}
}
```
以上就是一个简单的学生管理系统的设计,采用了单例模式、工厂模式、观察者模式和三层架构。这样设计的好处是,系统的各个模块之间耦合度低,易于维护和扩展。
阅读全文