C \ # 디자인 모드 (8) - 브리지 모드 (브리지 패턴)
9714 단어 브리지 모드디자인 모드C#나 랑 같이 C 배 워.#
여기 서 텔레비전 리모컨 의 한 예 로 브리지 모델 로 해결 하 는 문 제 를 끌 어 낸다. 먼저, 우리 각 브랜드 의 텔레비전 은 리모컨 이 있다. 이때 우리 가 생각 할 수 있 는 디자인 은 리모컨 을 추상 적 인 유형 으로 하고 추상 적 인 유형 에서 리모컨 을 제공 하 는 것 이 실현 되 며 다른 구체 적 인 텔레비전 브랜드 의 리모컨 은 모두 이런 추상 적 인 유형 을 계승 하 는 것 이다.구체 적 인 디자인 유형 도 는 다음 과 같다.
이러한 실현 으로 인해 모든 유형의 텔레비전 은 자신의 리모컨 을 가지 게 되 었 다. 이런 디자인 은 텔레비전의 변화 에 잘 대응 할 수 있 고 파생 류 만 추가 하면 된다. 그러나 시간 이 지 날수 록 사용 자 는 리모컨 의 기능 을 바 꿔 야 한다. 예 를 들 어 사용자 가 나중에 리모컨 에 이전 데스크 로 돌아 가 는 등 기능 을 추가 해 야 할 때이때 위의 디자인 은 추상 류 Remote Control 이 제공 하 는 인 터 페 이 스 를 수정 해 야 한다. 이때 추상 류 에 하나의 방법 만 추가 하면 해결 할 수 있다. 그러나 이런 문 제 는 우리 가 추상 적 인 실현 을 바 꾸 었 다 는 것 이다. 만약 에 사용자 가 전기 기기 의 모델 과 리모컨 기능 을 동시에 바 꾸 려 면 위의 디자인 은 상당 한 수정 을 초래 할 것 이다.분명히 이런 디자인 은 결코 좋 은 디자인 이 아니다.그러나 브리지 모델 을 사용 하면 이 문 제 를 잘 해결 할 수 있다. 다음은 브리지 모델 이 어떻게 실현 되 는 지 구체 적 으로 보 자.
2. 브리지 모델 에 대한 상세 한 소개
2.1 정의
브리지 모델 은 추상 적 인 부분 과 실현 부분의 결합 을 통 해 독립 적 으로 변화 할 수 있 도록 할 것 이다.위의 문제 에서 추상 화 는 바로 RemoteControl 류 이 고 실현 부분 은 On (), Off (), NextChannel () 등 과 같은 방법 (즉 리모컨 의 실현) 이다. 위의 디자인 에서 추상 화 와 실현 부분 이 함께 있 으 면 브리지 모델 의 목적 은 이들 을 분리 시 키 는 것 이다. 대상 을 대상 으로 하 는 패 키 징 변화 원칙 에 따라 우 리 는 실현 부분의 변 화 를 실현 할 수 있다.(즉, 리모컨 기능 의 변화) 다른 유형 에 봉 인 된 것 이다. 이런 사고방식 은 바로 브리지 모델 의 실현 이다. 여러분 은 브리지 모델 의 실현 코드 를 대조 하여 우리 의 분석 사고방식 을 해결 할 수 있다.
2.2 브리지 모델 의 실현
위의 정의 부분 은 우리 의 브리지 모델 의 목적 과 실현 방향 을 제시 했다. 다음은 브리지 모델 이 머리말 부분 디자인 의 부족 을 어떻게 해결 하 는 지 구체 적 으로 보 자.
추상 화 된 부분의 코드:
///
/// ,
///
public class RemoteControl
{
//
private TV implementor;
//
public TV Implementor
{
get { return implementor; }
set { implementor = value; }
}
///
/// , ,
///
public virtual void On()
{
implementor.On();
}
///
///
///
public virtual void Off()
{
implementor.Off();
}
///
///
///
public virtual void SetChannel()
{
implementor.tuneChannel();
}
}
///
///
///
public class ConcreteRemote : RemoteControl
{
public override void SetChannel()
{
Console.WriteLine("---------------------");
base.SetChannel();
Console.WriteLine("---------------------");
}
}
리모컨 의 실현 방법 부분 코드, 즉 일부 코드 를 실현 하 는 것 이다. 이때 우 리 는 다른 추상 적 인 유형의 TV 로 리모컨 기능 의 변 화 를 밀봉 하고 구체 적 인 실현 은 구체 적 인 모델 텔레비전 에 맡 겨 완성 한다.
///
/// ,
///
public abstract class TV
{
public abstract void On();
public abstract void Off();
public abstract void tuneChannel();
}
///
/// ,
///
///
public class ChangHong : TV
{
public override void On()
{
Console.WriteLine(" ");
}
public override void Off()
{
Console.WriteLine(" ");
}
public override void tuneChannel()
{
Console.WriteLine(" ");
}
}
///
/// ,
///
public class Samsung : TV
{
public override void On()
{
Console.WriteLine(" ");
}
public override void Off()
{
Console.WriteLine(" ");
}
public override void tuneChannel()
{
Console.WriteLine(" ");
}
}
브리지 모드 를 사용 한 클 라 이언 트 호출 코드:
///
///
///
class Client
{
static void Main(string[] args)
{
//
RemoteControl remoteControl = new ConcreteRemote();
//
remoteControl.Implementor = new ChangHong();
remoteControl.On();
remoteControl.SetChannel();
remoteControl.Off();
Console.WriteLine();
//
remoteControl.Implementor = new Samsung();
remoteControl.On();
remoteControl.SetChannel();
remoteControl.Off();
Console.Read();
}
}
위의 브리지 모델 의 실현 에서 리모컨 의 기능 실현 방법 은 리모컨 추상 류 에서 이 루어 지지 않 고 실현 부분 을 다른 텔레비전 류 로 포장 하 는 것 이다. 그러나 리모컨 에는 텔레비전 류 의 인용 만 포함 되 어 있 고 이런 디자인 도 현실 생활 의 상황 에 매우 부합된다.(내 가 생각 하 는 현실 생활 에서 리모컨 의 실현 - 리모컨 에는 채널 을 바 꾸 는 것 이 포함 되 지 않 고 텔레비전 을 켜 는 기능 의 실현 이 포함 되 어 있다. 리모컨 은 텔레비전 에서 이러한 기능 의 인용 만 포함 하고 적외선 은 텔레비전 에서 대응 하 는 기능 의 실현 을 찾 아 간다)... 브리지 모델 을 통 해 우 리 는 추상 화 와 실현 화 부분 을 분리 하면 이 두 가지 변화 에 잘 대처 할 수 있다.
2.3 브리지 모드 의 유형 도
브리지 모델 의 실현 을 본 후에 여러분 들 이 브리지 모델 의 유형 간 관 계 를 정리 하 는 데 도움 을 주기 위해 브리지 모델 의 유형 구 조 를 제시 합 니 다.
3. 브리지 모델 의 장단 점
브리지 모델 을 소개 하고 브리지 모델 의 구체 적 인 장단 점 을 살 펴 보 자.
장점:
추상 적 인 인 인 터 페 이 스 를 결합 을 실현 하 다.
추상 과 실현 은 독립 적 으로 확장 할 수 있 고 상대방 에 게 영향 을 주지 않 는 다.
세부 사항 은 고객 에 게 투명 하고 구체 적 인 세부 사항 을 숨 기 는 데 사 용 됩 니 다.
단점: 시스템 의 복잡 도 증가
4. 사용 장면
우 리 는 브리지 모델 의 사용 장면 을 다시 한 번 살 펴 보고 다음 과 같은 상황 에서 브리지 모델 을 사용 해 야 한다.
4. 567917. 만약 에 한 시스템 이 구조 재 의 추상 화 된 역할 과 구체 화 된 역할 사이 에 더 많은 유연성 을 추가 하고 두 차원 에서 정태 적 인 관 계 를 구축 하지 않도록 해 야 한다.
4. 567917. 디자인 요구 실현 화 캐릭터 의 어떠한 변화 도 클 라 이언 트 에 영향 을 주지 않 거나 실현 화 캐릭터 의 변 화 는 클 라 이언 트 에 게 완전히 투명 하 다.
여러 플랫폼 을 뛰 어 넘 는 도형 과 창 시스템 이 필요 합 니 다.
4. 567917. 한 가지 유형 은 두 개의 독립 적 인 변화 차원 이 존재 하고 두 가지 차원 이 모두 확장 되 어야 한다.
5. 실제 응용 브리지 모델 의 예
브리지 모델 도 구체 적 인 시스템 개발 에 자주 사용 되 고 3 층 구조 에 대해 브리지 모델 을 응용 했다. 3 층 구조 중의 업무 논리 층 BLL 에서 브리지 모델 과 데이터 조작 층 의 결합 (DAL) 을 통 해이 구현 방식 은 BLL 계층 에서 DAL 계층 의 인용 을 참조 하 는 것 입 니 다. 이 데이터 작업 의 실현 은 클 라 이언 트 코드 를 바 꾸 지 않 고 동적 으로 바 꿀 수 있 습 니 다. 다음은 간단 한 예제 코드 를 보 겠 습 니 다.
//
// Web
class Client
{
static void Main(string[] args)
{
BusinessObject customers = new CustomersBusinessObject("ShangHai");
customers.Dataacces = new CustomersDataAccess();
customers.Add(" ");
Console.WriteLine(" :");
customers.ShowAll();
customers.Delete(" ");
Console.WriteLine(" :");
customers.ShowAll();
Console.WriteLine(" :");
customers.Update("Learning_Hard");
customers.ShowAll();
Console.Read();
}
}
// BLL
public class BusinessObject
{
//
private DataAccess dataacess;
private string city;
public BusinessObject(string city)
{
this.city = city;
}
//
public DataAccess Dataacces
{
get { return dataacess; }
set { dataacess = value; }
}
//
public virtual void Add(string name)
{
Dataacces.AddRecord(name);
}
public virtual void Delete(string name)
{
Dataacces.DeleteRecord(name);
}
public virtual void Update(string name)
{
Dataacces.UpdateRecord(name);
}
public virtual string Get(int index)
{
return Dataacces.GetRecord(index);
}
public virtual void ShowAll()
{
Console.WriteLine();
Console.WriteLine("{0} :", city);
Dataacces.ShowAllRecords();
}
}
public class CustomersBusinessObject : BusinessObject
{
public CustomersBusinessObject(string city)
: base(city) { }
//
public override void ShowAll()
{
Console.WriteLine("------------------------");
base.ShowAll();
Console.WriteLine("------------------------");
}
}
///
/// (DAL)
///
public abstract class DataAccess
{
//
public abstract void AddRecord(string name);
public abstract void DeleteRecord(string name);
public abstract void UpdateRecord(string name);
public abstract string GetRecord(int index);
public abstract void ShowAllRecords();
}
public class CustomersDataAccess:DataAccess
{
//
private List customers =new List();
public CustomersDataAccess()
{
//
customers.Add("Learning Hard");
customers.Add(" ");
customers.Add(" ");
customers.Add(" ");
}
//
public override void AddRecord(string name)
{
customers.Add(name);
}
public override void DeleteRecord(string name)
{
customers.Remove(name);
}
public override void UpdateRecord(string updatename)
{
customers[0] = updatename;
}
public override string GetRecord(int index)
{
return customers[index];
}
public override void ShowAllRecords()
{
foreach (string name in customers)
{
Console.WriteLine(" " + name);
}
}
}
총화
여기 서 브리지 모델 에 대한 소 개 는 브리지 모델 이 추상 화 와 실현 화의 결합 을 실현 하여 서로 독립 적 이 고 서로 영향 을 주지 않도록 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간편한 Java 브리지 모드정의: 추상적인 부분과 실현된 부분을 분리하여 그것들이 모두 독립적으로 변화할 수 있도록 한다. 특징: 브리지 모델은 클래스의 최소 디자인 원칙을 바탕으로 봉인, 집합 및 계승 등 행위를 통해 서로 다른 클래스가 서...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.