Bridge Design Pattern

2023. 12. 5. 17:02디자인패턴

728x90
  • 기존 시스템에 부수적인 새로운 기능들을 추가할 때 사용하면 유용하다.
  • 기존 프로그램의 변경 없이 기능을 확장할 수 있다.

 

Abstraction

  • 상위 수준의 제어 논리를 제공하며, Implementor 객체에 의존해
    실제 하위 수준 작업들을 수행

Implementor

  • 모든 ConcreteImplementor에 공통적인 인터페이스를 선언하며,
    Abstraction은 여기에 선언된 메서드들을 통해서만 소통할 수 있다.

예) 

 

public interface Product {
    public String productName();
    public void produce();
}
public class CentralLocking implements Product{
    private final String productName;
    
    public CentralLocking(String productName){
    	this.productName = productName;
    }
    @Override
    public String productName() {
    	return productName;
    }
    @Override
    public void produce() {
    	System.out.println("Producing Central Locking System");
    }
}
public class GearLocking implements Product{
    private final String productName;
    
    public GearLocking(String productName){
    	this.productName = productName;
    }
    @Override
    public String productName() {
    	return productName;
    }
    @Override
    public void produce() {
    	System.out.println("Producing Gear Locking System");
    }
}
public abstract class Car {
    private final Product product;
    private final String carType;
    
    public Car(Product product,String carType){
        this.product = product;
        this.carType = carType;
    }
    public abstract void assemble();
    public abstract void produceProduct();
    public void printDetails(){
    	System.out.println("Car: "+carType+", Product:"+product.productName());
    }
}
public class BigWheel extends Car{
    private final Product product;
    private final String carType;
    
    public BigWheel(Product product, String carType) {
        super(product, carType);
        this.product = product;
        this.carType = carType;
    }
    @Override
    public void assemble() {
    	System.out.println("Assembling "+product.productName()+" for "+carType);
    }
    @Override
    public void produceProduct() {
    	product.produce();
        System.out.println("Modifing product "+product.productName()+" according to  -
        "+carType);
    }
}
public class Motoren extends Car{
    private final Product product;
    private final String carType;
    
    public Motoren(Product product, String carType) {
        super(product, carType);
        this.product = product;
        this.carType = carType;
    }
    @Override
    public void assemble() {
   		System.out.println("Assembling "+product.productName()+" for "+carType);
    }
    @Override
    public void produceProduct() {
        product.produce();
        System.out.println("Modifing product "+product.productName()+" according to  -
        "+carType);
    }
}
public class TestBridgePattern {
    public static void main(String[] args) {
        Product product = new CentralLocking("Central Locking System");
        Product product2 = new GearLocking("Gear Locking System");
        
        Car car = new BigWheel(product , "BigWheel xz model");
        car.produceProduct();
        car.assemble();
        car.printDetails();
        System.out.println();
        
        car = new BigWheel(product2 , "BigWheel xz model");
        car.produceProduct();
        car.assemble();
        car.printDetails();
        
        car = new Motoren(product, "Motoren lm model");
        car.produceProduct();
        car.assemble();
        car.printDetails();
        System.out.println();
        
        car = new Motoren(product2, "Motoren lm model");
        car.produceProduct();
        car.assemble();
        car.printDetails();
    }
}
728x90

'디자인패턴' 카테고리의 다른 글

Chain of Responsibility Design Pattern  (1) 2023.12.05
Compound Patterns  (2) 2023.11.14
Proxy Pattern  (0) 2023.11.07
State pattern  (0) 2023.10.31
composite pattern  (0) 2023.10.30