수색…


자바에서 브릿지 패턴 구현

브릿지 패턴은 추상화를 구현과 분리하여 둘 다 독립적으로 변할 수 있도록합니다. 그것은 상속이 아니라 구성으로 성취되었습니다.

위키 백과의 UML 다이어그램 :

여기에 이미지 설명을 입력하십시오.

이 패턴에는 네 가지 구성 요소가 있습니다.

Abstraction : 인터페이스를 정의합니다.

RefinedAbstraction : 추상화를 구현합니다.

Implementor : Implementor 위한 인터페이스를 정의합니다.

ConcreteImplementor : 구현 자 인터페이스를 구현합니다.

The crux of Bridge pattern : 컴포지션을 사용하는 두 개의 직교 클래스 계층 구조 (상속 없음). 추상화 계층 구조 및 구현 계층 구조는 독립적으로 다를 수 있습니다. 구현은 추상화를 절대로 언급하지 않습니다. 추상화는 구성원 (구현을 통해)으로 구현 인터페이스를 포함합니다. 이 구성은 한 가지 수준의 상속 계층 구조를 줄입니다.

실제 단어 사용 사례 :

수동 및 자동 기어 시스템의 두 가지 버전을 갖도록 다른 차량을 사용하십시오.

예제 코드 :

/* Implementor interface*/
interface Gear{
    void handleGear();
}

/* Concrete Implementor - 1 */
class ManualGear implements Gear{
    public void handleGear(){
        System.out.println("Manual gear");
    }
}
/* Concrete Implementor - 2 */
class AutoGear implements Gear{
    public void handleGear(){
        System.out.println("Auto gear");
    }
}
/* Abstraction (abstract class) */
abstract class Vehicle {
    Gear gear;
    public Vehicle(Gear gear){
        this.gear = gear;
    }
    abstract void addGear();
}
/* RefinedAbstraction - 1*/
class Car extends Vehicle{
    public Car(Gear gear){
        super(gear);
        // initialize various other Car components to make the car
    }
    public void addGear(){
        System.out.print("Car handles ");
        gear.handleGear();
    }
}
/* RefinedAbstraction - 2 */
class Truck extends Vehicle{
    public Truck(Gear gear){
        super(gear);
        // initialize various other Truck components to make the car
    }
    public void addGear(){
        System.out.print("Truck handles " );
        gear.handleGear();
    }
}
/* Client program */
public class BridgeDemo {    
    public static void main(String args[]){
        Gear gear = new ManualGear();
        Vehicle vehicle = new Car(gear);
        vehicle.addGear();
        
        gear = new AutoGear();
        vehicle = new Car(gear);
        vehicle.addGear();
        
        gear = new ManualGear();
        vehicle = new Truck(gear);
        vehicle.addGear();
        
        gear = new AutoGear();
        vehicle = new Truck(gear);
        vehicle.addGear();
    }
}

산출:

Car handles Manual gear
Car handles Auto gear
Truck handles Manual gear
Truck handles Auto gear

설명:

  1. Vehicle 은 추상화입니다.
  2. CarTruckVehicle 두 가지 구체적인 구현물입니다.
  3. Vehicle 는 추상 메소드 addGear() 정의합니다.
  4. Gear 는 구현 자 인터페이스입니다.
  5. ManualGearAutoGearGear 두 가지 구현입니다.
  6. Vehicle 에는 인터페이스를 구현하는 대신 implementor 인터페이스가 포함되어 있습니다. Compositon 구현 인터페이스의이 패턴의 핵심이다은 독립적으로 변화시키는 추상화와 구현을 허용한다.
  7. CarTruck 은 추상화를위한 구현 (재정의 된 추상화)을 정의합니다 : addGear() : Gear - Manual 또는 Auto

브리지 패턴의 경우 사용 사례 :

  1. 추상화구현 은 서로 독립적으로 바뀔 수 있으며 컴파일 타임에 바인딩되지 않습니다.
  2. 직교 계층 구조 매핑 - 추상화구현을 위한 계층 구조입니다.


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow