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 |