브리지 정의 : 추상화와 행동을 분리하고 각각 독립적이지만 동적으로 결합합니다.
브리지 모드를 사용하는 이유
일반적으로 추상 클래스 또는 인터페이스에 여러 콘크리트 구현 (콘크리트 서브 클래스)이있는 경우 이러한 콘크리트 간의 관계는 다음과 같습니다.
1. 이러한 구체적인 구현은 위에서 언급 한 바와 같이,이 두 형태의 더미는 개념적 반복없이 평행합니다.
2. 실제 적용에서는 종종 이러한 여러 콘크리트 클래스 중에서 개념적으로 겹칠 수 있습니다. 그런 다음 공통 초록과 일반적인 동작을 분리해야합니다. 원래 하나의 인터페이스에 넣을 계획 이었지만 이제는 각각 두 개의 인터페이스를 설계하여 추상과 행동을 배치해야합니다.
예를 들어, 예를 들어, 중간 컵과 큰 컵의 커피에는 두 가지 유형의 커피가 있으며 우유와 우유의 종류도 있습니다. 간단한 상속이 사용되는 경우, 우유가있는 중간 컵이 있기 때문에이 네 가지 특정 구현 (우유없이 우유가없는 컵) 사이에 개념 중첩이 있으며, 우유가없는 중간 컵이 있습니다. 그것은 또한 중간 컵에 있습니다. 그런 다음 브리지 모드를 사용하여 구현합니다.
브리지 모드를 구현하는 방법
위에서 언급 한 커피는 예입니다. 우리는 원래 하나의 인터페이스를 설계 할 계획입니다 (추상 클래스).
추상 부분의 인터페이스 코드를 살펴 보겠습니다.
코드 사본은 다음과 같습니다.
공개 초록 수업 커피 {
Coffeeimp Coffeemp;
public void setCoffeeImp () {
this.coffeeimp = CoffeeImpsingleton.getTheCoffeimp ();
}
public coffeeimp getCoffeeimp () {return this.coffeeimp;}
공개 초록 void pourcoffee ();
}
Coffeeimp는 우유가없는 행동 인터페이스입니다.
코드 사본은 다음과 같습니다.
공개 초록 클래스 커피 히트 {
공개 초록 void pourcoffeeimp ();
}
이제 우리는 두 개의 추상 클래스가 있으며, 각각 상속하고 구체적인 클래스를 구현합니다.
코드 사본은 다음과 같습니다.
// 미들 컵
공공 수업 중간 코피는 커피를 확장합니다 {
public mediumcoffee () {setcoffeeimp ();}
공개 무효 PourCoffee () {
Coffeeimp CoffeeMIMP = this.GetCoffeeimp ();
// 반복 수를 사용하여 중간 컵을 만들거나 큰 컵을 두 번 반복 할 것인지 설명합니다 (int i = 0; i <2; i ++).
Coffeeimp.pourcoffeeimp ();
}
}
}
코드 사본은 다음과 같습니다.
// 빅 컵
공개 수업 superizecoffee Coffee {
public superizecoffee () {setcoffeeimp ();}
공개 무효 PourCoffee () {
Coffeeimp CoffeeMIMP = this.GetCoffeeimp ();
// 반복 수를 사용하여 중간 컵을 만들거나 큰 컵을 반복하여 큰 컵으로 반복해야합니다.
Coffeeimp.pourcoffeeimp ();
}
}
}
위는 각각 중간 컵과 큰 컵의 구현입니다.
코드 사본은 다음과 같습니다.
// 우유를 추가하십시오
공공 수업 milkcoffee imp Coffeeimp {
milkcoffeeimp () {}
공개 void pourcoffeeimp () {
System.out.println ( "맛있는 우유 추가");
}
}
// 우유가 추가되지 않았습니다
공개 클래스 ClostrantCoffee imp Coffeeimp {
FragrantCoffeeImp () {}
공개 void pourcoffeeimp () {
System.out.println ( "아무것도 추가, 신선한 향기");
}
}
우리는 이미 브리지 모델의 기본 프레임 워크를 설정했습니다.
1. 중간 컵에 우유를 추가하십시오
2. 중간 컵에 우유를 첨가하지 않았습니다
3. 큰 컵에 우유를 넣으십시오
4. 우유가없는 큰 컵
사용하기 전에 어떻게 동적으로 결합되어 있는지 살펴 보겠습니다.
코드 사본은 다음과 같습니다.
공개 클래스 CoffeeMpsingleton {
개인 정적 커피 커피 촬영;
공개 CoffeeMpsingleton (CoffeeImp CoffeeMpin)
{this.coffeeimp = CoffeeMpin;}
public static coffeeimp getthecoffeeimp () {
Coffeeimp 리턴;
}
}
우유 중간 컵과 큰 우유 한 잔이 어떻게 나오는지 보자.
// 우유를 꺼냅니다
CoffeeMpsingleton CoffeeMpsingleton = 새로운 CoffeeMpsingleton (새로운 milkcoffeeimp ());
// 우유와 함께 중간 컵
MediumCoffee MediumCoffee = 새로운 MediumCoffee ();
mediumcoffee.pourcoffee ();
// 큰 우유 한 잔
SuperSizeCoffee SuperSizeCoffee = New SuperSizeCoffee ();
superizecoffee.pourcoffee ();
참고 : Coffeeimp 및 Coffee와 같은 교량 스키마의 실행 클래스는 일대일 관계이며, 커피 히프를 올바르게 만드는 것이이 스키마의 핵심입니다.
EJB에서 브리지 모드의 적용
EJB에는 DAO (Data Access Object) 패턴이 있으며, 데이터베이스마다 데이터베이스 작업이 다르기 때문에 비즈니스 로직을 특정 데이터 리소스와 분리합니다. 다른 데이터베이스를 작동하는 동작은 다음과 같이 행동 인터페이스 DAO로 독립적으로 추상화됩니다.
1. 비즈니스 대상 (커피와 유사)
모든 주문을 배치 할 사용자를 찾는 것과 같은 일부 초록 비즈니스 운영을 구현하십시오. daoimplementor는 데이터베이스 작업에 사용됩니다.
2. 데이터 액세스 개체 (커피 히프와 유사)
데이터베이스 리소스의 일부 초록 작업.
3. Orderdaocs, OrderDaooracle, OrderDaosybase와 같은 daoimplementor
"삽입"및 기타 문과 같은 특정 데이터베이스 작업은 Oracle Orderdaosybase입니다.
4. 데이터베이스 (JDBC API를 통한 Cloudscape, Oracle 또는 Sybase 데이터베이스)