디자인 모드 - 브리지 모드 (BRIDGE)

4993 단어 디자인 모드
1. 의도
추상 적 인 부분 과 그 실현 부분 을 분리 하여 독립 적 으로 변화 시 킬 수 있다.
2. 별명
Handle / Body
3. 동기
하나의 추상 이 여러 가지 실현 이 가능 할 때 보통 계승 으로 그들 을 조율 한다.추상 류 는 이 추상 적 인 인터페이스 에 대해 정 의 를 내 렸 고 구체 적 인 자 류 는 서로 다른 방식 으로 이 루어 졌 다.그러나 이 방법 은 때때로 융통성 이 부족 하 다.계승 체 제 는 추상 적 인 부분 과 그의 실현 부분 을 고정 시 켜 추상 적 인 부분 과 실현 부분 을 독립 적 으로 수정 하고 확대 하 며 재 활용 하기 어렵다.
4. 적용 성
1) 추상 과 그 실현 부분 사이 에 고정된 연결 관 계 를 가지 고 싶 지 않다.예 를 들 어 이 경우 프로그램 이 실 행 될 때 일부 가 선택 되 거나 전환 되 기 때 문 일 수 있 습 니 다.
2)    유형의 추상 과 실현 은 모두 자 류 를 생 성 하 는 방법 을 통 해 확대 할 수 있다.
5. 구조
6. 코드 예시
개인 적 으로 Bridge 모델 은 매우 간단 하면 서도 OO 의 정 수 를 잘 나타 내 는 디자인 모델 이 라 고 생각 합 니 다.이른바 디자인 중의 '상속 보 다 는 취 합 을 사용 하 라' 는 것 은 대부분 Bridge 모드 로 문 제 를 해결 할 수 있다.
다음 장면 을 고려 하면 추상 적 인 기본 클래스 인 AbstractCar, 하위 SUV, Car (승용차), 트럭 (Truck), 그리고 뒷바퀴 구동 과 4 구, 디 젤 차, 가솔린 차, 하 이브 리드, 순수 전기, 배 기량 (1.6, 2.0, 2.4) 이 있 는데 계승 실현 방식 에 따라 몇 가지 유형 이 있어 야 합 니까?조합 하면 몇 십 가지 예요.
    class Program
    {
        static void Main(string[] args)
        {
        }
    }

    abstract class AbstractCar
    {
        public abstract void Go();
        public abstract void FuelCharging();
    }

    abstract class SUV : AbstractCar
    { 
    }

    abstract class DieselEngineSUV : SUV
    { 
    }

    abstract class GasolineEngineSUV : SUV
    { 
    }

    class DieselEngineSUV_20 : DieselEngineSUV
    {
        public override void Go()
        {
            Console.WriteLine("A 2.0 diesel engine SUV is on the road");
        }

        public override void FuelCharging()
        {
            Console.WriteLine("Add diesel oil to the SUV");
        }
    }

    class GasolineEngineSUV_16T : GasolineEngineSUV
    {
        public override void Go()
        {
            Console.WriteLine("A 1.6T gasoline engine SUV is on the road");
        }

        public override void FuelCharging()
        {
            Console.WriteLine("Add 93 gasoline to the SUV");
        }
    }

이른바 폭발 이다.
Bridge 모드 는 추상 적 인 부분 과 그의 실현 부분 을 분리 시 킬 수 있다. 위의 예 에서 추상 적 인 부분 은 엔진 유형, 배 기량, 소형 승용차 또는 SUV 를 말 하 는데 실현 부분 은 바로 차 자체 이다.
    class Program
    {
        static void Main(string[] args)
        {
            AbstractCar suv = new SUV();
            suv.engine = new GasolineEngine();
            suv.fuelCharge = new FuelCharging();
            suv.Run();
        }
    }

    abstract class AbstractCar
    {
        public Engine engine { get; set; }
        public IFuelChargingImp fuelCharge { get; set; }
        public abstract void Run();
        public abstract void FuelCharging();
    }

    abstract class Engine
    {
        public string EnergyType { get; set; }
        public string Volume { get; set; }
        public abstract void Run();
    }

    class GasolineEngine : Engine
    {
        public override void Run()
        {
            
        }
    }

    class FuelCharging : IFuelChargingImp
    {
        public void Charge()
        {
            Console.WriteLine("charge with #93 oil");
        }
    }

    class DieselCharging : IFuelChargingImp
    {
        public void Charge()
        {
            Console.WriteLine("charge with diesel oil");
        }
    }

    interface IFuelChargingImp
    {
        void Charge();
    }

    class SUV : AbstractCar
    {
        public override void Run()
        {
            engine.Run();
        }

        public override void FuelCharging()
        {
            fuelCharge.Charge();
        }
    }

위의 이 예 는 비교적 간단하게 쓰 였 으 나, 기본적으로 Bridge 모델 의 특징 을 나 타 낼 수 있다.
7. 깊이 생각 하기
Bridge 모드 구 조 는 간단 하지만 잘 쓰 기 는 쉽 지 않다.
1) 잠재 적 이거 나 실제 적 인 변화 가 발생 하고 이러한 수량 이 증가 할 수 있 을 때 우 리 는 도대체 무엇이 변화 하고 있 는 지 명확 하 게 해 야 한다. 이 변화의 점 을 정리 하 는 것 은 OO 의 핵심 이다. 만약 에 이 변화의 점 에 대해 깊이 이해 하지 못 하거나 이 변화 점 을 잘못 정의 하면 일련의 문 제 를 초래 할 것 이다.복잡 한 장면 에서 '추상 적 인 부분' 은 흔히 하나 가 아니다. 이 럴 때 여러 개의 Bridge 를 동시에 사용 할 수 있 음 을 암시 한다.
위의 차 를 예 로 들 면 변화의 점 은 '엔진 유형' 일 수도 있 고 '동력 을 어떻게 제공 하 는가' 라 고 이해 할 수도 있다. 만약 에 변화의 점 이 엔진 유형 이 라 고 정의 한다 면 추상 적 인 엔진 류 에 실현 을 더 하 는 것 이다. 만약 에 '동력 을 어떻게 제공 하 는가' 라면 '동력' 을 정의 할 것 이다.인 터 페 이 스 는 서로 다른 엔진 류 를 정의 하여 이 인 터 페 이 스 를 실현 합 니 다. 이 호출 자 자동차 에 대해 서 는 다 를 것 입 니 다. 관심 사 는 행동 만 하 느 냐, 아니면 더욱 복잡 한 표현 이 필요 하 느 냐 에 달 려 있 습 니 다.
2) Implementor 의 생 성 을 고려 합 니 다. Implementor 는 추상 적 인 부분 이 고 읽 기와 쓰기 가 가능 한 집합 으로 정의 할 수 있 기 때문에 IOC 의 능력 을 제공 합 니 다. Implementor 의 생 성 은 세 가지 가 있 습 니 다.
a) Abstraction 은 모든 Concrete Implementor 를 알 고 있 으 며, 일부 매개 변 수 를 통 해 어떤 종 류 를 만 들 지 결정 합 니 다.
b) 기본 구현 을 제공 하고 필요 할 때 전환 합 니 다.
c) 대상 의 창설 을 다른 종류 에 대리 하여 단순 공장 또는 추상 공장 을 통 해 실현 할 수 있다
3) Bridge 모드 에서 제공 하 는 동적 전환 능력
Bridge 모드 에서 취 합 이 생 겼 기 때문에 이 취 합 이 읽 기와 쓰기 가 가능 하 다 면 실행 시 동적 전환 이 가능 한 능력 을 제공 합 니 다.
8. 다른 모델 과 의 관계
Bridge 모델 과 Strategy 모델 의 유형 도 는 같다. Bridge 모델 은 구조 적 모델 로 대상 의 직접적인 관계 에 주목 하고 Strategy 는 행위 형 모델 로 행위 의 교체 가능성 에 주목한다.
Bridge 는 보통 간단 한 공장 이나 추상 적 인 공장 으로 만든다.

좋은 웹페이지 즐겨찾기