创建型模式
作用
classDiagram
class Product {
<>
}
class ConcreteProductA
class ConcreteProductB
class Factory
Product <|-- ConcreteProductA
Product <|-- ConcreteProductB
Factory --> Product : creates
note for Factory "工厂模式结构"
本质
封装对象创建过程,使系统不依赖具体对象实例化
模式分类
模式 | 用途 | 示例场景 |
---|---|---|
工厂方法 | 创建单一产品 | 数据库连接工厂 |
抽象工厂 | 创建产品族 | GUI组件库 |
单例 | 全局唯一实例 | 配置管理器 |
建造者 | 分步构建复杂对象 | SQL查询构建 |
原型 | 克隆现有对象 | 游戏角色复制 |
示例
// 单例模式(双重检查锁)
public class Singleton {
private volatile static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
// 工厂方法模式
interface Logger {
void log(String message);
}
class FileLogger implements Logger {
public void log(String message) {
System.out.println("文件日志: " + message);
}
}
class LoggerFactory {
public static Logger getLogger(String type) {
if ("file".equals(type)) {
return new FileLogger();
}
throw new IllegalArgumentException("未知日志类型");
}
}
注意事项
- 单例模式要考虑线程安全和序列化问题
- 工厂方法适合产品种类较少的情况
- 抽象工厂适合产品族扩展
- 建造者模式适合参数复杂的对象创建
- 原型模式要注意深拷贝/浅拷贝问题