Welcome to MikeDaDev's Blog – notes on Java, backend & system design.

Explore
MikeDaDev's Blog

#design-pattern

Things I've written about #design-pattern
  • visitor pattern

    Visitor Pattern trong Java hoạt động ra sao: cơ chế Double Dispatch để lách giới hạn Single Dispatch của JVM, dùng để duyệt cây cú pháp (AST), và đặt cạnh Pattern Matching trên Sealed Types của Java 21 xem bên nào hơn.

  • iterator pattern

    Đào sâu Iterator Pattern trong Java: fail-fast hoạt động nhờ biến modCount ra sao, CopyOnWriteArrayList đổi bộ nhớ lấy an toàn thế nào, Spliterator giúp chạy song song ra sao, và cách tự viết cursor iterator để stream hàng triệu bản ghi mà không OOM.

  • command pattern

    Command Pattern nhìn từ góc độ kiến trúc: biến động từ thành danh từ (Objectifying Actions), Undo/Redo dùng hai stack kết hợp Memento, đường tiến hóa sang CQRS (Command Query Responsibility Segregation) và Compensating Transactions trong Saga.

  • strategy pattern

    Nhìn Strategy Pattern bằng con mắt Solution Architect: Strategy khác State và Template Method ở đâu, dùng Functional Interface của Java để khỏi đẻ ra cả đống class thừa, và dựng một Dynamic Promotion Engine bằng Spring Boot.

  • observer pattern

    Đi từ Observer Pattern kinh điển tới Event-Driven Architecture (EDA): vì sao java.util.Observable bị deprecate từ Java 9, quản lý transaction với @TransactionalEventListener AFTER_COMMIT, xử lý backpressure trong Reactive Streams và so sánh với Apache Kafka.

  • facade pattern

    Nhìn Facade Pattern bằng con mắt Solution Architect: nó liên quan gì tới Law of Demeter, khác Adapter, Proxy, Decorator ở đâu, và lớn lên thành Anti-Corruption Layer (ACL trong DDD) ra sao khi phải bọc một hệ thống Core Banking legacy.

  • abstract factory pattern

    Abstract Factory Pattern nhìn từ góc độ kiến trúc hệ thống: dùng nó để thoát vendor lock-in khi chạy multi-cloud, dựng lớp trừu tượng cho Blob Storage, Message Queue và Secret Manager trên AWS/GCP, và cái giá phải trả gọi là Lowest Common Denominator.

  • decorator pattern

    Decorator Pattern nhìn từ góc Solution Architect: vì sao kế thừa gây Class Explosion, Decorator thủ công khác gì Spring AOP Proxies (JDK vs CGLIB), bẫy Self-Invocation trong AOP và ví dụ Resilient Caching Decorator kèm những điểm cần lưu ý trước khi đem lên production.

  • adapter pattern

    Adapter Pattern trong Java, từ bản chất OOP tới kiến trúc Lục Giác (Ports and Adapters), cách dựng Anti-Corruption Layer (ACL) để bảo vệ Domain Model trước hệ thống Legacy, và phân biệt Adapter với Facade, Proxy, Decorator.

  • prototype pattern

    Prototype Pattern trong Java: vì sao Cloneable bị coi là lỗi thiết kế của JDK, khác nhau giữa Shallow Copy và Deep Copy, và so sánh 4 cách nhân bản object dùng được trên production (Copy Constructor, Jackson, Kryo, Record Withers).

  • builder pattern

    Đào sâu Builder Pattern trong Java: vì sao JavaBeans Pattern và Telescoping Constructor dễ gây lỗi, cách dùng Staged Builder để thiếu trường bắt buộc là compile không qua, và khi nào nên dùng Lombok @Builder hay Java Records.

  • factory pattern

    Nhìn lại Factory Pattern từ góc độ kiến trúc: vì sao Factory kiểu switch-case kinh điển lại vi phạm chính Open/Closed Principle, cách inject Map bean trong Spring Boot để bỏ hẳn if-else, Functional Factory với Java Supplier, và phân biệt Factory Method với Abstract Factory qua ví dụ multi-cloud.

  • singleton pattern

    Singleton Pattern nhìn kỹ hơn một chút: vì sao việc đảo lệnh của JIT và CPU buộc Double-Checked Locking phải có volatile, 4 cách phá Singleton (Reflection, Serialization, Clone, ClassLoader) và vì sao dự án Spring nên để IoC Container quản lý singleton.

  • Spring IoC & Dependency Injection

    Mổ xẻ bên trong Spring IoC Container: DIP, IoC và DI khác nhau ra sao, vòng đời của một bean trong ApplicationContext, cách Spring gỡ circular dependency bằng cache 3 tầng (three-level cache), và vì sao field injection với @Autowired bị loại khỏi code enterprise.