设计模式是解决软件设计问题的经典方案,本文将结合代码案例解析五种最常用的Java设计模式,帮助开发者深入理解其应用场景和实现逻辑。
一、单例模式:全局唯一访问点
单例模式确保类只有一个实例,并提供全局访问入口。常见于数据库连接池、系统配置管理等场景56。
实现案例:
Java
复制
// 饿汉式(线程安全)
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() { return instance; }
}
二、工厂模式:对象创建解耦
通过接口隔离具体实现类,常用于日志系统、数据库驱动等需要灵活扩展的场景57。
形状工厂案例:
Java
复制
interface Shape { void draw(); }
class Circle implements Shape { public void draw() { System.out.println(" 圆形"); } }
class ShapeFactory {
public Shape createShape(String type) {
if("circle".equals(type)) return new Circle();
// 扩展其他形状...
return null;
}
}
三、观察者模式:事件驱动模型
实现对象间一对多的依赖关系,典型案例包括GUI事件监听、消息推送系统等13。
老大-小弟模型代码结构:
Java
复制
// 被观察者接口
interface Mandator {
void addWorker(Worker w);
void notifyWorkers();
}
// 观察者实现类
class WorkImpl1 implements Worker {
public void doSomeThing() { System.out.println(" 端茶"); }
}
四、策略模式:算法动态切换
通过封装算法族实现运行时策略切换,适用于支付方式选择、数据格式转换等场景46。
数据类型转换策略:
Java
复制
interface ParseStrategy {
Object parse(String value);
}
class IntegerStrategy implements ParseStrategy {
public Object parse(String v) { return Integer.valueOf(v); }
}
class Context {
private ParseStrategy strategy;
public void setStrategy(ParseStrategy s) { this.strategy = s; }
public Object executeParse(String v) { return strategy.parse(v); }
}
五、装饰器模式:功能动态扩展
在不修改原有对象结构的情况下添加新功能,常用于IO流处理、游戏装备系统等35。
咖啡加料案例:
Java
复制
abstract class Coffee { abstract double cost(); }
class Americano extends Coffee {
public double cost() { return 18.0; }
}
abstract class Decorator extends Coffee {
protected Coffee coffee;
public Decorator(Coffee c) { this.coffee = c; }
}
class MilkDecorator extends Decorator {
public double cost() { return coffee.cost() + 5.0; }
}