Bridge Pattern
Khi chúng ta có các cấu trúc phân cấp interface cả về mặt interface lẫn implementation của chúng thì Bridge pattern được sử dụng để tách rời (decouple) các interface khỏi phần implementation và ẩn đi phần chi tiết implementations với chương trình client.
Giả sử chúng ta có cấu trúc phân cấp như sau

Bridge Pattern tương ứng được dùng để phân rã phần interface và phần implementation sẽ có cấu trúc như sau

Đoạn mã Java như sau
Color.javapackage com.journaldev.design.bridge; public interface Color { public void applyColor(); }
Shape.javapackage 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(); }
Phần implementation tương ứng như sau
Triangle.javapackage 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(); } }
Pentagon.javapackage 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(); } }
Phần implementation cho Color
RedColor.javapackage com.journaldev.design.bridge; public class RedColor implements Color{ public void applyColor(){ System.out.println("red."); } }
GreenColor.javapackage com.journaldev.design.bridge; public class GreenColor implements Color{ public void applyColor(){ System.out.println("green."); } }
Chương trình client sử dụng cấu trúc Bridge pattern như sau
BridgePatternTest.javapackage 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) { Shape tri = new Triangle(new RedColor()); tri.applyColor(); Shape pent = new Pentagon(new GreenColor()); pent.applyColor(); } }
Kết quả hiển thị ra màn hình như sau
Triangle filled with color red. Pentagon filled with color green.
No comments :
Post a Comment