GoF设计模式:深入浅出,实战解析

一、引言
设计模式是软件工程中的一种重要思想,它可以帮助我们解决在软件开发过程中遇到的一些常见问题。GoF设计模式,即《设计模式:可复用面向对象软件的基础》一书中提出的23种经典设计模式,被誉为“设计模式的圣经”。本文将深入浅出地解析GoF设计模式,并结合实际案例进行实战解析。
二、GoF设计模式概述
GoF设计模式分为三大类:创建型模式、结构型模式和行为型模式。
1. 创建型模式:主要关注对象的创建过程,包括单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式等。
2. 结构型模式:主要关注类与类之间的关系,包括适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、代理模式等。
3. 行为型模式:主要关注对象之间的通信,包括策略模式、模板方法模式、观察者模式、状态模式、命令模式、中介者模式、迭代器模式、访问者模式等。
三、GoF设计模式实战解析
1. 单例模式
单例模式确保一个类只有一个实例,并提供一个全局访问点。以下是一个使用单例模式实现的日志记录器类:
```java
public class Logger {
private static Logger instance;
private Logger() {}
public static Logger getInstance() {
if (instance == null) {
instance = new Logger();
}
return instance;
}
public void log(String message) {
System.out.println(message);
}
}
```
2. 工厂方法模式
工厂方法模式定义了一个用于创建对象的接口,让子类决定实例化哪一个类。以下是一个使用工厂方法模式实现的图形绘制类:
```java
public interface Shape {
void draw();
}
public class Circle implements Shape {
public void draw() {
System.out.println("Drawing Circle");
}
}
public class Rectangle implements Shape {
public void draw() {
System.out.println("Drawing Rectangle");
}
}
public class ShapeFactory {
public static Shape getShape(String shapeType) {
if (shapeType.equalsIgnoreCase("CIRCLE")) {
return new Circle();
} else if (shapeType.equalsIgnoreCase("RECTANGLE")) {
return new Rectangle();
}
return null;
}
}
```
3. 适配器模式
适配器模式将一个类的接口转换成客户期望的另一个接口,使得原本接口不兼容的类可以一起工作。以下是一个使用适配器模式实现的电源适配器类:
```java
public interface PowerSource {
void providePower();
}
public class UsPowerSource implements PowerSource {
public void providePower() {
System.out.println("Providing power with 110V");
}
}
public class PowerAdapter implements PowerSource {
private PowerSource powerSource;
public PowerAdapter(PowerSource powerSource) {
this.powerSource = powerSource;
}
public void providePower() {
powerSource.providePower();
}
}
```
4. 观察者模式
观察者模式定义了对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。以下是一个使用观察者模式实现的股票价格监控系统:
```java
public interface StockPriceObserver {
void update(String stockName, double price);
}
public class StockPriceSubject {
private List
public void addObserver(StockPriceObserver observer) {
observers.add(observer);
}
public void removeObserver(StockPriceObserver observer) {
observers.remove(observer);
}
public void notifyObservers(String stockName, double price) {
for (StockPriceObserver observer : observers) {
observer.update(stockName, price);
}
}
public void setStockPrice(String stockName, double price) {
notifyObservers(stockName, price);
}
}
```
四、总结
GoF设计模式是软件工程中的宝贵财富,掌握这些设计模式有助于我们更好地解决软件开发过程中遇到的问题。本文深入浅出地解析了GoF设计模式,并结合实际案例进行了实战解析,希望能对读者有所帮助。在实际项目中,灵活运用这些设计模式,可以使我们的代码更加简洁、易维护、可扩展。






