Thiết kế mẫu (8) - Mẫu cầu nối

Mẫu cầu nối (Bridge Pattern) là phương pháp tách biệt phần trừu tượngphần hiện thực của một hệ thống, cho phép chúng phát triển độc lập. Ví dụ minh họa dưới đây cho thấy cách chuyển đổi từ mô hình kế thừa sang mẫu cầu nối:

Giả sử có một sinh vật gồm hai thành phần chính: tinh thần (trừu tượng)thể xác (hiện thực). Tinh thần có thể là thiên thần hoặc ác quỷ, trong khi thể xác có thể là chó hoặc dơi. Kết hợp các yếu tố này tạo ra sinh vật đa dạng như "chó thiên thần" hay "dơi ác quỷ".

Ưu điểm:

  • Phân tách rõ ràng giữa trừu tượng và hiện thực
  • Dễ dàng mở rộng tính năng mà không làm xáo trộn hệ thống

Nhược điểm:

  • Làm phức tạp kiến trúc hệ thống

Triển khai mã nguồn:

1. Giao diện tinh thần

public interface Spirit {
    void describe();
}

2. Lớp hiện thực ác quỷ

public class Demon implements Spirit {
    @Override
    public void describe() {
        System.out.print("Ác quỷ");
    }
}

3. Lớp hiện thực thiên thần

public class Guardian implements Spirit {
    @Override
    public void describe() {
        System.out.print("Thiên thần");
    }
}

4. Lớp trừu tượng sinh vật

public abstract class Creature {
    protected Spirit spirit;

    public Creature(Spirit spirit) {
        this.spirit = spirit;
    }

    public void display() {
        spirit.describe();
    }
}

5. Lớp cụ thể chó

public class Puppy extends Creature {
    public Puppy(Spirit spirit) {
        super(spirit);
    }

    @Override
    public void display() {
        super.display();
        System.out.println(" Chó");
    }
}

6. Lớp cụ thể dơi

public class VampireBat extends Creature {
    public VampireBat(Spirit spirit) {
        super(spirit);
    }

    @Override
    public void display() {
        super.display();
        System.out.println(" Dơi");
    }
}

7. Lớp kiểm thử

public class Test {
    public static void main(String[] args) {
        Creature creature1 = new Puppy(new Guardian());
        creature1.display();  // Thiên thần Chó

        Creature creature2 = new VampireBat(new Demon());
        creature2.display();  // Ác quỷ Dơi
    }
}

Khi tách biệt tinh thần và thể xác, việc mở rộng thêm sinh vật (mèo, thỏ) hay tinh thần (yêu tinh, thần thánh) sẽ không ảnh hưởng đến thành phần còn lại. Mẫu thiết kế này giúp tạo ra sự đa dạng sinh học thông qua các tổ hợp linh hồn-thể xác khác nhau.

Thẻ: mẫu cầu nối thiết kế phần mềm Java nguyên tắc mở rộng Thiết Kế Hướng Đối Tượng

Đăng vào ngày 7 tháng 7 lúc 08:34