자바 디자인 모델 의 교량(Bridge)모델
교량 모델 은 대상 의 구조 모델 이다.
위의 그림 에서 보 듯 이 시스템 은 두 개의 등급 구 조 를 포함한다.
4.567917.추상 화 된 캐릭터 와 추상 화 된 캐릭터 로 구 성 된 추상 화 등급 구 조 를 수정 한다4.567917.실현 화 된 역할 과 두 가지 구체 적 인 실현 화 된 역할 로 구 성 된 실현 화 등급 구조교량 모델 과 관련 된 역할 은 다음 과 같다.
4.567917.추상 화(Abstraction)역할:추상 화 된 정의 와 실현 대상 에 대한 인용 을 저장 합 니 다4.567917.추상 화(Refined Abstraction)화 된 역할 을 수정 합 니 다.추상 화 된 역할 을 확장 하고 부모 류 가 추상 화 에 대한 정 의 를 바 꾸 고 수정 합 니 다4.567917.실현 화(Implementor)역할:이 역할 은 실현 화 된 캐릭터 의 인 터 페 이 스 를 제시 하지만 구체 적 인 실현 을 제시 하지 않 는 다.반드시 지적 해 야 할 것 은 이 인 터 페 이 스 는 반드시 추상 화 된 캐릭터 의 인터페이스 정의 와 같 지 않 고 실제로 이 두 인 터 페 이 스 는 매우 다 를 수 있다 는 것 이다.실현 화 된 역할 은 바 텀 조작 만 해 야 하고 추상 화 된 역할 은 바 텀 조작 을 바탕 으로 하 는 더욱 높 은 조작 만 해 야 한다4.567917.구체 적 인 실현 화(Concrete Implementor)역할:이 역할 은 실현 화 된 캐릭터 인터페이스의 구체 적 인 실현 을 제시한다대상 은 행위 에 대한 포장 이 고 행 위 는 방법 에 의 해 이 루어 진다.이 지시 성 시스템 에서 추상 화 등급 구조 중의 클래스 는 operation()방법 을 봉인 했다.화 등급 구조 중의 클래스 패 키 징 을 실현 하 는 것 은 operationImp()방법 이다.
추상 화 등급 구조 에서 의 상업 방법 은 대응 하 는 실현 화 대상 에 대한 위임 을 통 해 자신의 기능 을 실현 한다.이것 은 추상 화 된 역할 이 서로 다른 실례 화 대상 에 위임 함으로써 자신의 기능 을 동태 적 으로 전환 하 는 목적 을 달성 할 수 있다 는 것 을 의미한다.
지시 성 소스 코드:
추상 화 된 역할,상업 방법 operation()의 실현 은 실현 대상 에 대한 위임(operationImp()방법 호출)을 통 해 이 루어 진다.
abstract public class Abstraction {
protected Implementor imp;
/**
*
*/
public void operation() {
imp.operationImp();
}
}
추상 화 된 역할 을 수정 하여 상업 방법 이 바 뀌 었 다.
public class RefinedAbstraction extends Abstraction {
/**
*
*/
public void operation() {
// improved logic
}
}
실현 화 캐릭터 추상 류 Implementor 에서 추상 적 인 방법 operationImp()를 설명 하 는데 이 방법 은 반드시 구체 적 인 하위 클래스 에서 이 루어 져 야 한다.
abstract public class Implementor {
/**
*
*/
public abstract void operationImp();
}
구체 적 으로 실현 화 된 역할 은 추상 적 인 Implementor 가 설명 한 상업 방법 operationImp()를 실현 했다.
public class ConcreteImplementorA extends Implementor {
/**
*
*/
public void operationImp() {
System.out.println("Do something...");
}
}
일반적으로 캐릭터 를 실현 하 는 모든 방법 은 추상 화 된 캐릭터 중의 특정한 방법 이 이에 대응 해 야 하지만 반대로 반드시 그렇지 는 않다.추상 화 된 캐릭터 의 인터페이스 가 실현 화 된 캐릭터 의 인터페이스 보다 넓다 는 얘 기다.추상 화 된 역할 은 실현 화 된 역할 과 관련 된 방법 을 제공 하 는 동시에 다른 상업 방법 도 제공 할 수 있다.한편,실현 화 된 역할 은 추상 화 된 역할 의 관련 행 위 를 실현 하기 위해 존재 한다.예시
에 어 버스(Airbus),보잉(Boeing),맥 도(McDonnell-Douglas)는 모두 항공기 제조 업 체 로 항공기(Passenger Plane)와 화물 적재 기(Cargo Plane)를 생산 한다.이 비행기 제조 사 들 과 그들 이 만 든 비행기의 종 류 를 설명 하 는 시스템 을 설계 해 야 한다.
설계 안 1
이 설계 방안 에는 여객기 와 화물 기 두 개의 인터페이스 가 있다.모든 구체 적 인 비행 기 는 에 어 버스,보잉,MD 등 초 류 를 계승 해 야 한다.이렇게 되면 모든 구체 적 인 비행 기 는 두 개의 초 유형 을 가지 고 있다.비행기 제조 업 체 유형,승객,화물 기 유형 이다.
이러한 설 계 는 구체 적 인 비행기 와 비행기 제조 업 체,비행기 종류 간 의 결합 이 너무 강해 서'개-폐 원칙'을 만족 시 킬 수 없다.
4.567917.시스템 에 새로운 비행기 제조 업 체 를 도입 해 야 한다4.567917.시스템 에 새로운 비행기 유형 을 도입 해 야 한다설계 안 2
교량 모델,추상 화 역할―비행기의 종류,실현 화 역할―비행기 제조 업 체.
여객기 와 화물 기 는 한 비행기의'환생'다 리 를 거 쳐 각각 에 어 버스,보잉,맥 도 등 항공기 제조 업 체 어디 까지'환생'할 수 있 으 며,'출생'은 서로 다른 브랜드 의 비행기 다.
이'환생'다 리 는 사실상 집합 관계 이기 때문에 동태 적 으로 변화 할 수 있다.따라서 시스템 이 새로운 비행기 종류 나 비행기 제조 업 체 에 가입 해 야 한다 면 기 존의 각 역할 은 바 꿀 필요 가 없고 바 꿔 야 할 것 은 다 형 적 인 집적 관계 일 뿐이다.
표시 소스 코드:
추상 화 된 캐릭터 클래스 에 어 플 레 인.
abstract public class Airplane {
protected AirplaneMaker airplaneMaker;
abstract public void fly();
protected Airplane(AirplaneMaker airplaneMaker) {
this.airplaneMaker = airplaneMaker;
}
}
여객기 와 화물 기 는 추상 화 를 수정 하 는 역할 에 속한다.
public class PassengerPlane extends Airplane {
public void fly() {
// Write your code here
airplaneMaker.produce();
}
public PassengerPlane(AirplaneMaker airplaneMaker) {
super(airplaneMaker);
}
}
public class CargoPlane extends Airplane {
public void fly() {
// Write your code here
airplaneMaker.produce();
}
public CargoPlane(AirplaneMaker airplaneMaker) {
super(airplaneMaker);
}
}
실현 화 역할 은 항공기 제조 사 에 어 플 레 인 메이커 로 추상 화 된 캐릭터 를 수정 하 는 데 필요 한 인 터 페 이 스 를 제공한다.
abstract public class AirplaneMaker {
abstract public void produce();
}
구체 적 실현 화 역할 은 에 어 버스,보잉,MD 다.
public class Airbus extends AirplaneMaker {
public void produce() {
// Write your code here
System.out.println("produce by Airbus");
}
}
public class Boeing extends AirplaneMaker {
public void produce() {
// Write your code here
System.out.println("produce by Boeing");
}
}
public class MD extends AirplaneMaker {
public void produce() {
// Write your code here
System.out.println("produce by MD");
}
}
클 라 이언 트 코드.
public class BridgePatternDemo {
public static void main(String[] args) {
Airplane mdPassengerPlane = new PassengerPlane(new MD());
Airplane mdCargoPlane = new CargoPlane(new MD());
mdPassengerPlane.fly();
mdCargoPlane.fly();
Airplane boeingPassengerPlane = new PassengerPlane(new Boeing());
Airplane boeingCargoPlane = new CargoPlane(new Boeing());
boeingPassengerPlane.fly();
boeingCargoPlane.fly();
}
}
현재 새로운 비행기 제조 업 체 나 새로운 비행기 종 류 를 추가 하려 면 시스템 에 새로운 수정 추상 화 역할 이나 새로운 구체 적 인 실현 화 역할 을 도입 하면 된다.즉,시스템 의 기능 은 기 존 코드 를 수정 하지 않 고 확장 할 수 있 으 며'개폐-폐'원칙 에 부합된다.자바 디자인 모델 의 교량(Bridge)모델 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 교량 모델 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.