DEV Community

钟智强
钟智强

Posted on

软件架构模式揭秘......小白也能懂的架构

在本文中,我将使用 Java 和 UML 对软件工程中常见的架构模式进行图文并茂的解释。Java 不仅是一门强大的编程语言,更是一种清晰表达软件设计理念的工具。UML 则让我能够以可视化的方式理解结构与交互。本博客面向所有想深入理解架构思想的开发者,不论你是否主攻 Java,都能从中获得清晰的认知。


为什么用 Java 和 UML?

在架构学习中,语言并不是核心,但选择 Java 作为表达工具有如下优点:

  • 静态类型强、结构清晰,便于表达层次与依赖。
  • 社区资料丰富、语法易于理解。
  • 与 UML 结合后,能直接在代码中体现组件之间的关系。 > UML 则是一种轻量级的 UML 语言,能快速表达出类关系、组件依赖、时序交互等关键架构视角。

架构模式一览

  1. 分层架构(Layered Architecture)
  2. 管道-过滤器架构(Pipe and Filter)
  3. 事件驱动架构(Event-Driven Architecture)
  4. 微内核架构(Microkernel Architecture)
  5. 微服务架构(Microservices Architecture)
  6. 客户端-服务器架构(Client-Server Architecture)
  7. 模型-视图-控制器(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);
    }
}
Enter fullscreen mode Exit fullscreen mode

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(" "));
    }
}
Enter fullscreen mode Exit fullscreen mode

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));
    }
}
Enter fullscreen mode Exit fullscreen mode

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();
    }
}
Enter fullscreen mode Exit fullscreen mode

5. 微服务架构(Microservices Architecture)

适用场景

  • Web 应用、桌面应用 > 客户端负责用户交互,服务器负责业务处理与数据持久化。

在这里插入图片描述

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello from Server";
    }
}
Enter fullscreen mode Exit fullscreen mode

7. 模型-视图-控制器(MVC)

适用场景

  • Web 应用框架,如 Spring MVC

控制器负责业务流程,模型负责数据结构,视图负责展示逻辑。

在这里插入图片描述

@Controller
public class BlogController {
    @GetMapping("/blog")
    public String showBlog(Model model) {
        model.addAttribute("title", "技术小屋");
        return "blogView";
    }
}
Enter fullscreen mode Exit fullscreen mode

架构不是写给架构师看的高大图纸,它是代码之上的思想,是系统长期演化的骨骼。

我以 Java 和 UML 为镜,拆解每一种架构模式的精髓, 从分层到微服务,从事件驱动到插件机制,这些不是孤立的概念,而是你我在开发路上不断遇见的选择题、权衡题、甚至是哲学题。

🌟 架构之路,没有一劳永逸,只有适配场景与团队认知的最优解。希望这篇文章不仅让你看懂了结构图,也激起你内心对架构「为何如此设计」的怀疑与思考。

Top comments (0)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.