1. 교량 모형 구조도
2. 브릿지 모드의 주인공
추상화 역할: 추상 클래스의 인터페이스를 정의하고 구현된 객체에 대한 참조를 저장합니다.
세련된 추상화 역할: 추상화 역할을 확장하고 상위 클래스의 추상화 정의를 변경 및 수정합니다.
구현자 역할: 특정 구현을 제공하지 않고 구현 클래스의 인터페이스를 정의합니다. 이 인터페이스는 추상 역할의 인터페이스 정의와 반드시 동일할 필요는 없습니다. 실제로 두 인터페이스는 완전히 다를 수 있습니다. 구현된 역할은 하위 수준 작업만 제공해야 하며, 추상 역할은 하위 수준 작업을 기반으로 상위 수준 작업만 제공해야 합니다.
구체적인 구현자 역할: 구현된 역할 인터페이스를 구현하고 특정 구현을 정의합니다.
3. 브릿지 모델의 장점
1. 별도의 인터페이스와 구현 부분
구현자와 추상화를 공유하면 구현 부분에 대한 컴파일 시간 종속성을 줄이는 데 도움이 됩니다
인터페이스 및 구현 공유는 계층화를 촉진하여 더 나은 구조의 시스템을 만듭니다
2. 확장성 향상
3. 구현 세부 사항을 고객에게 투명하게 만듭니다.
4. 브리지 모드 적용 시나리오
1. 시스템이 구성 요소의 추상 역할과 구체적인 역할 사이에 더 많은 유연성을 추가해야 하는 경우 두 수준 간에 정적 연결을 설정하지 마십시오.
2. 구현된 역할의 변경 사항이 고객에게 영향을 주어서는 안 되며, 구현된 역할의 변경 사항이 고객에게 완전히 투명해야 한다는 설계가 필요합니다.
3. 구성 요소에는 하나 이상의 추상 역할과 구현 역할이 있으며 시스템은 이들 간의 동적 결합이 필요합니다.
4. 시스템에서 상속을 사용하는 데에는 문제가 없지만 추상적인 역할과 구체적인 역할은 독립적으로 변경되어야 하므로 둘에 대한 독립적인 관리가 필요하도록 설계되었습니다.
5. 브리지 모드 및 기타 모드
추상 팩토리 패턴: 추상 팩토리 패턴을 사용하여 특정 브리지 패턴을 생성하고 구성할 수 있습니다.
Adapter 모드(어댑터 모드): 어댑터 모드는 관련 없는 클래스가 함께 작업할 수 있도록 돕기 위해 사용됩니다. 일반적으로 시스템 설계가 완료된 후에 사용됩니다. 그러나 브리지 패턴은 시스템 초기에 사용되므로 추상적인 인터페이스와 구현 부분을 독립적으로 변경할 수 있습니다.
상태 모드(state mode): 브릿지 모드는 두 계층 구조 간의 관계를 설명하는 반면, 상태 모드는 객체와 상태 객체 간의 관계를 설명합니다. 상태 패턴은 브리지 패턴의 변형된 특수한 경우입니다.
6. 브릿지 모드 PHP 예시
<?php /** * 抽象化角色 * 抽象化给出的定义,并保存一个对实现化对象的引用。 */ abstract class Abstraction { /* 对实现化对象的引用 */ protected $imp; /** * 某操作方法 */ public function operation() { $this->imp->operationImp(); } } /** * 修正抽象化角色 * 扩展抽象化角色,改变和修正父类对抽象化的定义。 */ class RefinedAbstraction extends Abstraction { public function __construct(Implementor $imp) { $this->imp = $imp; } /** * 操作方法在修正抽象化角色中的实现 */ public function operation() { echo 'RefinedAbstraction operation '; $this->imp->operationImp(); } } /** * 实现化角色 * 给出实现化角色的接口,但不给出具体的实现。 */ abstract class Implementor { /** * 操作方法的实现化声明 */ abstract public function operationImp(); } /** * 具体化角色A * 给出实现化角色接口的具体实现 */ class ConcreteImplementorA extends Implementor { /** * 操作方法的实现化实现 */ public function operationImp() { echo 'Concrete implementor A operation <br />'; } } /** * 具体化角色B * 给出实现化角色接口的具体实现 */ class ConcreteImplementorB extends Implementor { /** * 操作方法的实现化实现 */ public function operationImp() { echo 'Concrete implementor B operation <br />'; } } /** * 客户端 */ class Client { /** * Main program. */ public static function main() { $abstraction = new RefinedAbstraction(new ConcreteImplementorA()); $abstraction->operation(); $abstraction = new RefinedAbstraction(new ConcreteImplementorB()); $abstraction->operation(); } } Client::main(); ?>
위는 PHP를 사용하여 브리지 모드를 구현하는 코드이며, 데코레이션 모드에 대한 몇 가지 개념적 차이점도 있습니다. 모두의 학습에 도움이 되기를 바랍니다.