Bridge pattern

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 Design Pattern Interface Hierarchy

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
bridge design pattern, bridge pattern uml, bridge pattern example


Đoạn mã Java như sau
Color.java
package com.journaldev.design.bridge;

public interface Color {

 public void applyColor();
}
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();
}

Phần implementation tương ứng như sau
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();
 } 

}
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();
 } 

}

Phần implementation cho 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.");
 }
}

Chương trình client sử dụng cấu trúc Bridge pattern như sau
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) {
  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