Tìm hiểu Bridge Design Pattern trong Java
4 phút đọc17/10/2025
Về tác giả
I’m passionate about web development and sharing my insights through articles, with over 8 years of experience. I hope these sharings inspire you and help build a strong web development community.
@#@
Tôi đam mê phát triển web và chia sẻ những hiểu biết của mình thông qua các bài viết, với hơn 8 năm kinh nghiệm. Tôi hy vọng những chia sẻ này sẽ truyền cảm hứng cho các bạn và giúp xây dựng một cộng đồng phát triển web mạnh mẽ.
Cập nhật thông tin mới nhấtNhận các thông tin mới nhất về mối đe dọa, báo cáo an ninh mạng từ CyStack về hòm thư điện tử của bạn
{"success":true,"head":"<title>Tìm hiểu Bridge Design Pattern trong Java - CyStack Tutorial</title>\n<meta name=\"description\" content=\"Hôm nay, chúng ta sẽ cùng khám phá một trong những Design Pattern cấu trúc vô cùng mạnh mẽ: Bridge Design Pattern trong Java. Trong quá trình phát triển phần\"/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-video-preview:-1, max-image-preview:large\"/>\n<link rel=\"canonical\" href=\"https://blog.cystack.org/tutorial/vi/2025/10/17/bridge-design-pattern-trong-java/\" />\n<meta property=\"og:locale\" content=\"en_US\" />\n<meta property=\"og:type\" content=\"article\" />\n<meta property=\"og:title\" content=\"Tìm hiểu Bridge Design Pattern trong Java - CyStack Tutorial\" />\n<meta property=\"og:description\" content=\"Hôm nay, chúng ta sẽ cùng khám phá một trong những Design Pattern cấu trúc vô cùng mạnh mẽ: Bridge Design Pattern trong Java. Trong quá trình phát triển phần\" />\n<meta property=\"og:url\" content=\"https://blog.cystack.org/tutorial/vi/2025/10/17/bridge-design-pattern-trong-java/\" />\n<meta property=\"og:site_name\" content=\"CyStack Tutorial\" />\n<meta property=\"article:tag\" content=\"vi\" />\n<meta property=\"article:section\" content=\"Java\" />\n<meta property=\"og:updated_time\" content=\"2026-08-03T17:12:35+07:00\" />\n<meta property=\"og:image\" content=\"https://s2.cystack.net/tutorial/17100248/bridge-design-pattern-trong-java.jpg\" />\n<meta property=\"og:image:secure_url\" content=\"https://s2.cystack.net/tutorial/17100248/bridge-design-pattern-trong-java.jpg\" />\n<meta property=\"og:image:width\" content=\"1200\" />\n<meta property=\"og:image:height\" content=\"630\" />\n<meta property=\"og:image:alt\" content=\"Bridge Design Pattern trong Java\" />\n<meta property=\"og:image:type\" content=\"image/jpeg\" />\n<meta property=\"article:published_time\" content=\"2025-10-17T10:28:40+07:00\" />\n<meta property=\"article:modified_time\" content=\"2026-08-03T17:12:35+07:00\" />\n<meta name=\"twitter:card\" content=\"summary_large_image\" />\n<meta name=\"twitter:title\" content=\"Tìm hiểu Bridge Design Pattern trong Java - CyStack Tutorial\" />\n<meta name=\"twitter:description\" content=\"Hôm nay, chúng ta sẽ cùng khám phá một trong những Design Pattern cấu trúc vô cùng mạnh mẽ: Bridge Design Pattern trong Java. Trong quá trình phát triển phần\" />\n<meta name=\"twitter:image\" content=\"https://s2.cystack.net/tutorial/17100248/bridge-design-pattern-trong-java.jpg\" />\n<meta name=\"twitter:label1\" content=\"Written by\" />\n<meta name=\"twitter:data1\" content=\"Bao Tran\" />\n<meta name=\"twitter:label2\" content=\"Time to read\" />\n<meta name=\"twitter:data2\" content=\"4 minutes\" />\n<script type=\"application/ld+json\" class=\"rank-math-schema\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https://blog.cystack.org/tutorial/#person\",\"name\":\"CyStack Tutorial\"},{\"@type\":\"WebSite\",\"@id\":\"https://blog.cystack.org/tutorial/#website\",\"url\":\"https://blog.cystack.org/tutorial\",\"name\":\"CyStack Tutorial\",\"publisher\":{\"@id\":\"https://blog.cystack.org/tutorial/#person\"},\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https://s2.cystack.net/tutorial/17100248/bridge-design-pattern-trong-java.jpg\",\"url\":\"https://s2.cystack.net/tutorial/17100248/bridge-design-pattern-trong-java.jpg\",\"width\":\"1200\",\"height\":\"630\",\"caption\":\"Bridge Design Pattern trong Java\",\"inLanguage\":\"en-US\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://blog.cystack.org/tutorial/vi/2025/10/17/bridge-design-pattern-trong-java/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":\"1\",\"item\":{\"@id\":\"https://blog.cystack.org/tutorial\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":\"2\",\"item\":{\"@id\":\"https://blog.cystack.org/tutorial/vi/category/java/\",\"name\":\"Java\"}},{\"@type\":\"ListItem\",\"position\":\"3\",\"item\":{\"@id\":\"https://blog.cystack.org/tutorial/vi/2025/10/17/bridge-design-pattern-trong-java/\",\"name\":\"T\\u00ecm hi\\u1ec3u Bridge Design Pattern trong Java\"}}]},{\"@type\":\"WebPage\",\"@id\":\"https://blog.cystack.org/tutorial/vi/2025/10/17/bridge-design-pattern-trong-java/#webpage\",\"url\":\"https://blog.cystack.org/tutorial/vi/2025/10/17/bridge-design-pattern-trong-java/\",\"name\":\"T\\u00ecm hi\\u1ec3u Bridge Design Pattern trong Java - CyStack Tutorial\",\"datePublished\":\"2025-10-17T10:28:40+07:00\",\"dateModified\":\"2026-08-03T17:12:35+07:00\",\"isPartOf\":{\"@id\":\"https://blog.cystack.org/tutorial/#website\"},\"primaryImageOfPage\":{\"@id\":\"https://s2.cystack.net/tutorial/17100248/bridge-design-pattern-trong-java.jpg\"},\"inLanguage\":\"en-US\",\"breadcrumb\":{\"@id\":\"https://blog.cystack.org/tutorial/vi/2025/10/17/bridge-design-pattern-trong-java/#breadcrumb\"}},{\"@type\":\"Person\",\"@id\":\"https://blog.cystack.org/tutorial/author/baotran/\",\"name\":\"Bao Tran\",\"url\":\"https://blog.cystack.org/tutorial/author/baotran/\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https://secure.gravatar.com/avatar/0cdd33c02ec4a531fcf557b9c1ccc276df0c69031b2382c959bcf335248e840c?s=96&d=mm&r=g\",\"url\":\"https://secure.gravatar.com/avatar/0cdd33c02ec4a531fcf557b9c1ccc276df0c69031b2382c959bcf335248e840c?s=96&d=mm&r=g\",\"caption\":\"Bao Tran\",\"inLanguage\":\"en-US\"}},{\"@type\":\"BlogPosting\",\"headline\":\"T\\u00ecm hi\\u1ec3u Bridge Design Pattern trong Java - CyStack Tutorial\",\"keywords\":\"Bridge Design Pattern\",\"datePublished\":\"2025-10-17T10:28:40+07:00\",\"dateModified\":\"2026-08-03T17:12:35+07:00\",\"articleSection\":\"Java\",\"author\":{\"@id\":\"https://blog.cystack.org/tutorial/author/baotran/\",\"name\":\"Bao Tran\"},\"publisher\":{\"@id\":\"https://blog.cystack.org/tutorial/#person\"},\"description\":\"H\\u00f4m nay, ch\\u00fang ta s\\u1ebd c\\u00f9ng kh\\u00e1m ph\\u00e1 m\\u1ed9t trong nh\\u1eefng Design Pattern c\\u1ea5u tr\\u00fac v\\u00f4 c\\u00f9ng m\\u1ea1nh m\\u1ebd: Bridge Design Pattern trong Java. Trong qu\\u00e1 tr\\u00ecnh ph\\u00e1t tri\\u1ec3n ph\\u1ea7n\",\"name\":\"T\\u00ecm hi\\u1ec3u Bridge Design Pattern trong Java - CyStack Tutorial\",\"@id\":\"https://blog.cystack.org/tutorial/vi/2025/10/17/bridge-design-pattern-trong-java/#richSnippet\",\"isPartOf\":{\"@id\":\"https://blog.cystack.org/tutorial/vi/2025/10/17/bridge-design-pattern-trong-java/#webpage\"},\"image\":{\"@id\":\"https://s2.cystack.net/tutorial/17100248/bridge-design-pattern-trong-java.jpg\"},\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https://blog.cystack.org/tutorial/vi/2025/10/17/bridge-design-pattern-trong-java/#webpage\"}}]}</script>\n"}
Hôm nay, chúng ta sẽ cùng khám phá một trong những Design Pattern cấu trúc vô cùng mạnh mẽ: Bridge Design Pattern trong Java. Trong quá trình phát triển phần mềm, chúng ta thường xuyên đối mặt với các tình huống khi cần quản lý những hệ thống phân cấp (interface hierarchies) phức tạp, không chỉ ở phần giao diện (interfaces/abstractions) mà còn cả ở phần triển khai (implementations). Bridge Design Pattern chính là giải pháp tối ưu để giải quyết vấn đề này.

Bridge Design Pattern là gì
Giống như Adapter Pattern, Bridge Design Pattern là một trong những Structural Design Pattern. Theo định nghĩa của GoF (Gang of Four), Bridge Design Pattern là:
Tách rời một abstraction khỏi phần implementation của nó, để cả hai có thể thay đổi độc lập.
Nguyên tắc cốt lõi trong việc triển khai Bridge Design Pattern là ưu tiên Composition hơn là Inheritance. Điều này có nghĩa là thay vì một lớp con kế thừa hành vi từ lớp cha, chúng ta sẽ sử dụng một đối tượng của lớp khác (composition) để cung cấp hành vi đó. Sự kết hợp này tạo ra một “cầu nối” (bridge) giữa hai hệ thống phân cấp riêng biệt.
Ví dụ Bridge Design Pattern trong Java
Để nắm bắt rõ hơn Bridge Design Pattern, chúng ta hãy cùng xem xét một ví dụ thực tế.

Chúng ta sẽ sử dụng Bridge Design Pattern để tách rời các interface từ phần implementation của chúng. Bạn sẽ nhận thấy một “cầu nối” (bridge) giữa các interface Shape và Color, cùng với việc sử dụng composition trong việc triển khai Bridge Pattern. Điều này có nghĩa là lớp Shape sẽ chứa một đối tượng Color, thay vì kế thừa từ nó.

Dưới đây là mã Java cho các interface và lớp trừu tượng mà chúng ta sẽ xây dựng:
Đầu tiên là interface Color.java đơn giản, định nghĩa hành vi áp dụng màu sắc:
Color.java
package com.journaldev.design.bridge;
public interface Color {
public void applyColor();
}
Tiếp theo là lớp trừu tượng Shape.java. Đây chính là nơi chúng ta tạo ra “cầu nối” bằng cách sử dụng composition:
Shape.java
package com.journaldev.design.bridge;
public abstract class Shape {
//Composition - implementor
protected Color color;
//constructor with implementor as input argument
public Shape(Color c){
this.color=c;
}
abstract public void applyColor();
}
Trong lớp Shape này, chúng ta khai báo một thuộc tính color kiểu Color và khởi tạo nó thông qua constructor. Đây chính là điểm mấu chốt: lớp Shape không tự định nghĩa cách áp dụng màu, mà nó ủy quyền (delegate) hành vi này cho đối tượng color mà nó chứa.
Chúng ta có các lớp triển khai cụ thể cho Shape như Triangle và Pentagon dưới đây:
Triangle.java
package com.journaldev.design.bridge;
public class Triangle extends Shape{
public Triangle(Color c) {
super(c);
}
@Override
public void applyColor() {
System.out.print("Triangle filled with color ");
color.applyColor(); // Ủy quyền cho đối tượng color
}
}
Pentagon.java
package com.journaldev.design.bridge;
public class Pentagon extends Shape{
public Pentagon(Color c) {
super(c);
}
@Override
public void applyColor() {
System.out.print("Pentagon filled with color ");
color.applyColor(); // Ủy quyền cho đối tượng color
}
}
Các lớp Triangle và Pentagon kế thừa từ Shape và triển khai phương thức applyColor(). Quan trọng là chúng gọi phương thức color.applyColor() để thực hiện việc tô màu, cho thấy sự ủy quyền hành vi cho đối tượng Color đã được inject vào.
Giờ là các lớp triển khai cụ thể cho interface Color:
RedColor.java
package com.journaldev.design.bridge;
public class RedColor implements Color{
public void applyColor(){
System.out.println("red.");
}
}
GreenColor.java
package com.journaldev.design.bridge;
public class GreenColor implements Color{
public void applyColor(){
System.out.println("green.");
}
}
Cuối cùng, hãy kiểm tra việc triển khai Bridge Pattern của chúng ta bằng một chương trình kiểm thử đơn giản:
BridgePatternTest.java
package com.journaldev.design.test;
import com.journaldev.design.bridge.GreenColor;
import com.journaldev.design.bridge.Pentagon;
import com.journaldev.design.bridge.RedColor;
import com.journaldev.design.bridge.Shape;
import com.journaldev.design.bridge.Triangle;
public class BridgePatternTest {
public static void main(String[] args) {
// Tạo một hình tam giác màu đỏ
Shape tri = new Triangle(new RedColor());
tri.applyColor();
// Tạo một hình ngũ giác màu xanh lá
Shape pent = new Pentagon(new GreenColor());
pent.applyColor();
}
}
Chương trình kiểm thử này minh họa rõ ràng cách chúng ta tạo ra các đối tượng Shape và “kết nối” chúng với các đối tượng Color mong muốn một cách linh hoạt. Triangle không cần biết RedColor là gì, và Pentagon cũng không cần quan tâm đến GreenColor. Chúng chỉ tương tác với interface Color.
Kết quả của chương trình ví dụ trên sẽ là:
Triangle filled with color red.
Pentagon filled with color green.
Kết Luận
Tóm lại, Bridge Design Pattern là một công cụ mạnh mẽ trong hộp công cụ của mỗi lập trình viên, đặc biệt khi bạn cần tách rời một abstraction khỏi implementation của nó để cả hai có thể thay đổi và phát triển độc lập. Nguyên tắc cốt lõi là ưu tiên composition hơn kế thừa, tạo ra một “cầu nối” linh hoạt giữa hai hệ thống phân cấp. Với Bridge Pattern, bạn không chỉ tạo ra mã nguồn dễ bảo trì, dễ mở rộng hơn mà còn xây dựng các hệ thống linh hoạt, có khả năng thích ứng cao với các yêu cầu thay đổi trong tương lai.