在本文中,我将使用 Java 和 UML 对软件工程中常见的架构模式进行图文并茂的解释。Java 不仅是一门强大的编程语言,更是一种清晰表达软件设计理念的工具。UML 则让我能够以可视化的方式理解结构与交互。本博客面向所有想深入理解架构思想的开发者,不论你是否主攻 Java,都能从中获得清晰的认知。
为什么用 Java 和 UML?
在架构学习中,语言并不是核心,但选择 Java 作为表达工具有如下优点:
- 静态类型强、结构清晰,便于表达层次与依赖。
- 社区资料丰富、语法易于理解。
- 与 UML 结合后,能直接在代码中体现组件之间的关系。 > UML 则是一种轻量级的 UML 语言,能快速表达出类关系、组件依赖、时序交互等关键架构视角。
架构模式一览
- 分层架构(Layered Architecture)
- 管道-过滤器架构(Pipe and Filter)
- 事件驱动架构(Event-Driven Architecture)
- 微内核架构(Microkernel Architecture)
- 微服务架构(Microservices Architecture)
- 客户端-服务器架构(Client-Server Architecture)
- 模型-视图-控制器(MVC)
1. 分层架构(Layered Architecture)
适用场景
- 企业应用系统(如 OA、ERP)
- 关注清晰职责划分与高内聚低耦合
系统分为多个逻辑层次,每一层只和紧邻的一层进行通信。
public class LoginController {
private AuthService authService = new AuthService();
public boolean login(String username, String password) {
return authService.authenticate(username, password);
}
}
public class AuthService {
private UserRepository repo = new UserRepository();
public boolean authenticate(String username, String password) {
return repo.findUser(username).passwordMatches(password);
}
}
2. 管道-过滤器架构(Pipe and Filter)
适用场景
- 图像处理、编译器、日志系统
数据流从一个过滤器流向下一个,每个过滤器对数据进行转换。
public interface Filter<T> {
T process(T input);
}
public class Tokenizer implements Filter<String> {
public List<String> process(String input) {
return Arrays.asList(input.split(" "));
}
}
3. 事件驱动架构(Event-Driven Architecture)
适用场景
- 高并发系统(如电商、消息推送)
- 系统解耦需求强的场景
组件通过发布和订阅事件进行通信,事件总线(或消息代理)作为中介。
public class EventBus {
private Map<String, List<Consumer<Event>>> listeners = new HashMap<>();
public void subscribe(String type, Consumer<Event> listener) {
listeners.computeIfAbsent(type, k -> new ArrayList<>()).add(listener);
}
public void publish(Event event) {
listeners.getOrDefault(event.getType(), List.of()).forEach(l -> l.accept(event));
}
}
4. 微内核架构(Microkernel Architecture)
适用场景
- 插件化系统(如 IDE、浏览器)
- 功能可扩展、核心稳定的产品 > 系统核心负责最小可运行单元,其它功能通过插件机制扩展。
public interface Plugin {
void initialize();
}
public class CoreEngine {
List<Plugin> plugins = new ArrayList<>();
private void registerPlugin(Plugin plugin) {
plugins.add(plugin);
plugin.initialize();
}
}
5. 微服务架构(Microservices Architecture)
适用场景
- Web 应用、桌面应用 > 客户端负责用户交互,服务器负责业务处理与数据持久化。
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello from Server";
}
}
7. 模型-视图-控制器(MVC)
适用场景
- Web 应用框架,如 Spring MVC
控制器负责业务流程,模型负责数据结构,视图负责展示逻辑。
@Controller
public class BlogController {
@GetMapping("/blog")
public String showBlog(Model model) {
model.addAttribute("title", "技术小屋");
return "blogView";
}
}
架构不是写给架构师看的高大图纸,它是代码之上的思想,是系统长期演化的骨骼。
我以 Java 和 UML 为镜,拆解每一种架构模式的精髓, 从分层到微服务,从事件驱动到插件机制,这些不是孤立的概念,而是你我在开发路上不断遇见的选择题、权衡题、甚至是哲学题。
🌟 架构之路,没有一劳永逸,只有适配场景与团队认知的最优解。希望这篇文章不仅让你看懂了结构图,也激起你内心对架构「为何如此设计」的怀疑与思考。
Top comments (0)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.