(33) C \ # 디자인 모델 - 브리지 모델 (브리지 패턴)
8485 단어 C \ # 디자인 모드
텔레비전 리모컨 의 예 를 들 어 브리지 모드 로 해결 하 는 문 제 를 끌어내다.우리 각 브랜드 의 텔레비전 은 모두 리모컨 을 가지 고 있다. 이때 우리 가 생각 할 수 있 는 디자인 은 리모컨 을 추상 적 인 유형 으로 하고 추상 적 인 유형 에서 리모컨 의 모든 실현 을 제공 하 며 다른 구체 적 인 텔레비전 브랜드 의 리모컨 은 모두 이 추상 적 인 유형 을 계승 하 는 것 이다.이러한 실현 으로 인해 모든 모델 의 텔레비전 은 자신의 리모컨 을 가지 게 되 었 다.이러한 디자인 은 텔레비전의 변화 에 잘 대응 할 수 있다. 하나의 파생 류 만 추가 하면 된다. 그러나 시간 이 지 날수 록 사용 자 는 리모컨 의 기능 을 바 꿔 야 한다. 이때 추상 류 가 제공 하 는 인 터 페 이 스 를 수정 해 야 한다. 이때 추상 류 에 하나의 방법 만 추가 하면 해결 할 수 있다.그러나 이렇게 가 져 온 문 제 는 우리 가 추상 적 인 실현 을 바 꾸 었 다 는 것 이다. 만약 에 사용자 가 텔레비전 모델 과 리모컨 기능 을 동시에 바 꿔 야 한다 면 위의 디자인 은 상당 한 수정 을 초래 할 것 이다.브리지 모드 를 사용 하면 이런 문 제 를 해결 할 수 있다.
브리지 모드 에 대한 상세 한 소개
정의.
브리지 모델 은 곧 추상 적 인 부분 과 실현 부분의 결합 을 실현 하여 그것들 을 독립 화 시 킬 것 이다.대상 을 대상 으로 하 는 패 키 징 변화 원칙 에 따라 우 리 는 실현 부분의 변화 (리모콘 기능 의 변화) 를 다른 유형 에 밀봉 할 수 있다. 이런 사고방식 은 바로 브리지 모델 의 실현 이다.
이루어지다
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _24BridgePatternDemo
{
///
///
///
class Program
{
static void Main(string[] args)
{
//
RemoteControl remotecontrol = new RemoteControl();
//
remotecontrol.Implementor = new Changhong();
remotecontrol.On();
remotecontrol.SetChannel();
remotecontrol.Off();
Console.WriteLine();
//
remotecontrol.Implementor = new Sanxing();
remotecontrol.On();
remotecontrol.SetChannel();
remotecontrol.Off();
Console.WriteLine();
ConcreteRemoter Conremotecontrol = new ConcreteRemoter();
Conremotecontrol.Implementor = new Changhong();
Conremotecontrol.On();
Conremotecontrol.SetChannel();
Conremotecontrol.Off();
}
}
///
/// ,
///
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.SetChannel();
}
}
///
///
///
public class ConcreteRemoter : RemoteControl
{
public override void SetChannel()
{
Console.WriteLine("---------------------");
base.SetChannel();
Console.WriteLine("---------------------");
}
}
///
/// ,
///
public abstract class TV
{
public abstract void On();
public abstract void Off();
public abstract void SetChannel();
}
///
///
///
public class Changhong : TV
{
public override void On()
{
Console.WriteLine(" !");
}
public override void Off()
{
Console.WriteLine(" !");
}
public override void SetChannel()
{
Console.WriteLine(" ");
}
}
public class Sanxing : TV
{
public override void On()
{
Console.WriteLine(" !");
}
public override void Off()
{
Console.WriteLine(" !");
}
public override void SetChannel()
{
Console.WriteLine(" ");
}
}
}
위의 브리지 모델 의 실현 에서 리모컨 의 기능 실현 방법 은 리모컨 추상 류 에서 이 루어 지지 않 고 실현 부분 을 다른 텔레비전 류 로 밀봉 하 는 것 이다. 그러나 리모컨 에는 텔레비전 류 의 인용 만 포함 된다.브리지 모델 을 통 해 우 리 는 추상 화 와 실현 화 부분 을 분리 했다.
브리지 모드 의 장단 점
장점:
시스템 의 복잡 도 를 증가 시 켰 다
필드 사용
실제 응용 브리지 모델 의 예
3 층 구조 에 응 용 된 브리지 모드 에 대해 BLL 층 에서 브리지 모드 를 통 해 DAL 층 과 결합 을 해제 하 는데 그 실현 방식 은 BLL 층 에서 DAL 층 의 인용 을 인용 한 것 이다. 그러면 데이터 작업 의 실현 은 클 라 이언 트 코드 를 바 꾸 지 않 고 동적 으로 바 꿀 수 있다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _25BridgePatternApplyDemo
{
//
class Program
{
static void Main(string[] args)
{
BusinessObject customers = new BusinessObject("ChengDu");
customers.Dataaccess = new CustomersDataAccess();
customers.Add(" ");
Console.WriteLine(" :");
customers.ShowAll();
customers.Delete(" ");
Console.WriteLine(" :");
customers.ShowAll();
Console.WriteLine(" :");
customers.Update("Learning_Hard");
customers.ShowAll();
Console.WriteLine();
}
}
//BLL
public class BusinessObject
{
private DataAccess dataaccess;
private string city;
public BusinessObject(string city)
{
this.city = city;
}
public DataAccess Dataaccess
{
get { return dataaccess; }
set { dataaccess = value; }
}
public virtual void Add(string name)
{
Dataaccess.AddRecord(name);
}
public virtual void Delete(string name)
{
Dataaccess.DeleteRecord(name);
}
public virtual void Update(string name)
{
Dataaccess.UpdateRecord(name);
}
public virtual string Get(int index)
{
return Dataaccess.GetRecord(index);
}
public virtual void ShowAll()
{
Console.WriteLine();
Console.WriteLine("{0} :", city);
Dataaccess.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(" ");
customers.Add("Bob");
}
public override void AddRecord(string name)
{
customers.Add(name);
}
public override void DeleteRecord(string name)
{
customers.Remove(name);
}
public override string GetRecord(int index)
{
return customers[index];
}
public override void ShowAllRecords()
{
foreach (string name in customers)
{
Console.WriteLine(" " + name);
}
}
public override void UpdateRecord(string name)
{
customers[0] = name;
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모드 시리즈 - 상태 모드아침 8 시 반 에 일어나 머리 를 빗 고 집 을 나 와 천안문 으로 갔 는데 천안문 에 도착 하 니 이렇게 추 운 날 에 사람 이 왜 이렇게 많 지?다 들 나 처럼 뜨 거 운 마음 을 가지 고 있 구나.오문 에 들...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.