자바 디자인 모델 의 교량(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)모델 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 교량 모델 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기