基本概念

复合模式:并非单一的设计模式,而是多种设计模式的组合应用,通过协同多种模式解决复杂场景问题。

核心思想:根据实际需求,将不同设计模式的优势结合,形成更强大的解决方案,同时避免单一模式的局限性。

示例说明

典型复合模式示例:MVC架构(Model-View-Controller

MVC是最经典的复合模式之一,融合了多种设计模式:

  • 观察者模式:View监听Model变化,自动更新界面

  • 策略模式:Controller作为不同逻辑处理的策略

  • 工厂模式:创建ModelView组件

  • 责任链模式:请求在Controller链中传递处理

  1. Model(数据模型,使用观察者模式)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24


class UserModel {
private String name;
private List<View> views = new ArrayList<>();

public void addView(View view) {
views.add(view);
}

public void setName(String name) {
this.name = name;
notifyViews(); // 数据变更时通知View
}

public String getName() {
return name;
}

private void notifyViews() {
for (View view : views) {
view.update(this);
}
}
  1. View(视图,观察者)
1
2
3
4
5
6
7
8
9
10
interface View {
void update(UserModel model);
}

class UserView implements View {
@Override
public void update(UserModel model) {
System.out.println("视图更新:用户名为 " + model.getName());
}
}
  1. Controller(控制器,策略模式)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
interface UserController {
void processRequest(String request);
}

class UserInfoController implements UserController {
private UserModel model;

public UserInfoController(UserModel model) {
this.model = model;
}

@Override
public void processRequest(String request) {
// 处理用户信息请求,策略逻辑
model.setName(request);
}
}
  1. 测试验证(组合模式应用)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Test {
public static void main(String[] args) {
// 工厂模式创建组件
UserModel model = new UserModel();
View view = new UserView();
UserController controller = new UserInfoController(model);

// 观察者模式注册
model.addView(view);

// 控制器处理请求(责任链模式示例)
controller.processRequest("张三");
}
}

Spring MVC是复合模式的典型应用,融合了:

  • 前端控制器模式(Front Controller):DispatcherServlet统一处理请求
  • 适配器模式:HandlerAdapter适配不同类型的处理器
  • 策略模式:HandlerMapping根据请求选择不同的处理器策略
  • 观察者模式:事件驱动的Bean生命周期管理
  • 工厂模式:BeanFactory创建Bean实例

总结

优点

  • 灵活性与扩展性:组合多种模式的优势,应对复杂业务场景
  • 复用性:利用成熟模式的设计思想,减少重复开发
  • 解耦性:不同模式负责不同模块,降低系统耦合度
  • 标准化:遵循经典设计模式的最佳实践,代码更易理解维护

缺点

  • 复杂性:多种模式组合可能导致代码结构复杂,学习成本高
  • 过度设计风险:无需复杂场景时使用复合模式,可能增加系统负担
  • 调试难度:多层模式嵌套可能导致问题定位困难

需要关注的设计原则

  • 按需组合:根据实际需求选择合适的模式组合,避免过度设计
  • 单一职责延伸:每个模式模块仍需遵循单一职责原则
  • 接口隔离:确保不同模式间的接口清晰,降低耦合
  • 关注模式协同:重点关注模式间的交互方式,而非单一模式实现

常见的使用方式

  • MVC:观察者模式 + 策略模式 + 工厂模式
  • 管道-过滤器模式:责任链模式 + 装饰者模式
  • 微服务架构:工厂模式 + 策略模式 + 观察者模式 + 适配器模式

复合模式是设计模式的综合,通过多种模式的协同,解决单一模式无法高效处理的复杂问题。