在软件工程领域,设计模式和组件化设计是提升代码质量和开发效率的重要手段。高效可复用的自定义组件不仅能减少重复工作,还能提高软件的可靠性和可维护性。本文将揭秘几种常见的设计模式,并结合实战案例展示如何将这些设计模式应用于实际项目中。
1. 设计模式概述
设计模式是一套被反复使用、多数人知晓、经过分类编目、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
2. 常见设计模式揭秘
2.1 单例模式(Singleton)
定义:确保一个类只有一个实例,并提供一个全局访问点。
用途:当系统中需要使用一个共享资源时,如数据库连接池、日志管理器等。
实现:
public class Singleton {
private static Singleton instance;
private Singleton() {
}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
2.2 工厂模式(Factory Method)
定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。
用途:当系统中存在多种子类,并且需要根据不同的条件创建不同子类实例时。
实现:
public interface Factory {
Product create();
}
public class ConcreteFactory1 implements Factory {
public Product create() {
return new ConcreteProduct1();
}
}
public class ConcreteFactory2 implements Factory {
public Product create() {
return new ConcreteProduct2();
}
}
2.3 观察者模式(Observer)
定义:定义对象间的一对多依赖关系,当一个对象的状态发生变化时,自动通知所有依赖于它的对象。
用途:在软件中处理多个对象之间的联动。
实现:
public interface Observer {
void update();
}
public interface Subject {
void registerObserver(Observer o);
void notifyObservers();
}
public class ConcreteSubject implements Subject {
private List<Observer> observers = new ArrayList<>();
public void registerObserver(Observer o) {
observers.add(o);
}
public void notifyObservers() {
for (Observer observer : observers) {
observer.update();
}
}
}
3. 实战案例
以下是一个使用工厂模式和单例模式的实际案例:
3.1 案例描述
假设我们需要设计一个图书管理系统,该系统包括不同类型的图书,如小说、技术书籍和教材。根据不同类型,需要展示不同的图书信息。
3.2 设计思路
- 使用工厂模式创建不同类型的图书实例。
- 使用单例模式创建数据库连接,以保证只有一个连接实例。
3.3 实现代码
// 图书接口
public interface Book {
void display();
}
// 小说类
public class Novel implements Book {
public void display() {
System.out.println("展示小说信息");
}
}
// 技术书籍类
public class TechBook implements Book {
public void display() {
System.out.println("展示技术书籍信息");
}
}
// 教材类
public class Textbook implements Book {
public void display() {
System.out.println("展示教材信息");
}
}
// 图书工厂
public class BookFactory {
public static Book createBook(String type) {
switch (type) {
case "novel":
return new Novel();
case "techBook":
return new TechBook();
case "textbook":
return new Textbook();
default:
return null;
}
}
}
// 数据库连接类(单例模式)
public class DBConnection {
private static DBConnection instance;
private Connection connection;
private DBConnection() {
try {
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/booksys", "user", "password");
} catch (SQLException e) {
e.printStackTrace();
}
}
public static DBConnection getInstance() {
if (instance == null) {
instance = new DBConnection();
}
return instance;
}
}
3.4 应用
在实际应用中,根据不同的业务需求,通过BookFactory创建对应的图书实例,并通过单例模式的DBConnection获取数据库连接。这样可以提高系统的扩展性和可维护性。
通过以上揭秘和实战案例,我们可以看到设计模式在软件开发中的应用。合理运用设计模式,能够帮助我们打造高效、可复用的自定义组件。
