C\#디자인 모드 프로 그래 밍 의 브리지 모드 를 간단하게 이해 합 니 다.
정의:추상 적 인 부분 과 실현 부분 을 분리 하여 독립 적 으로 변화 시 킬 수 있 도록 한다.
이해:한 대상 의 변 화 를 해결 하기 위해 여러 대상 이 변화 에 영향 을 미 치기 위해 구체 적 으로 대상 을 추상 화하 여 대상 과 변화 요소 의 결합 도 를 낮 추고 시스템 의 유지 가능성 과 확장 성 을 향상 시 켜 야 한다.
예:
핸드폰 시스템 의 생태 권 문제:
잔소리:알다 시 피 wp 의 생태 권 은 상대 적 으로 시스템 이 좋 지 않 습 니 다.여러분 은 노력 해 야 합 니 다.노키아 가 신단 에서 내 려 오고 wp 는 신단 에 올 라 가 야 합 니 다.
wp/ios 시스템 클래스:소프트웨어 를 실행 하면 본 운영 환경 에서 의 모든 소프트웨어 를 탑재 할 수 있 습 니 다.시스템 이 추가 되면 소프트웨어 는 시스템 버 전 을 하나 더 만들어 야 합 니 다.
weixin/kuwo 소프트웨어 클래스:소프트웨어 를 실행 하기 시 작 했 습 니 다.소프트웨어 를 새로 추가 하면 여러 시스템 버 전 을 만들어 야 합 니 다.
실현:iso 와 wp 시스템 에서 실행 되 며 다양한 소프트웨어 가 있 습 니 다.
아 날로 그:
다음은 구체 적 인 코드 에 따라 브리지 모델 을 알 아 보 겠 습 니 다.
소프트웨어 코드:
//
public interface ISoftWare
{
void start();
}
//Kuwo
public class Kuwo : ISoftWare
{
public void start()
{
Console.WriteLine(" , !");
}
}
//WeiXin
public class WeiXin : ISoftWare
{
public void start()
{
Console.WriteLine(" !");
}
}
운영 체제 코드
// ,
public abstract class System
{
public abstract void Run(ISoftWare software);
}
//Wp
public class WinPhone : System
{
public override void Run(ISoftWare software)
{
Console.WriteLine("Winphone , ;");
software.start();
}
}
//Ios
public class Ios : System
{
public override void Run(ISoftWare software)
{
Console.WriteLine("Ios , ;");
software.start();
}
}
클 라 이언 트 코드
public static void Main()
{
ISoftWare weixin = new WeiXin();
ISoftWare kuwo = new Kuwo();
//Wp
System WpSys = new WinPhone();
WpSys.Run(weixin);
WpSys.Run(kuwo);
//IOS
System IosSys = new Ios();
IosSys.Run(weixin);
IosSys.Run(kuwo);
Console.Read();
}
브리지 모드 의 장단 점브리지 모델 을 소개 하고 브리지 모델 의 구체 적 인 장단 점 을 살 펴 보 자.
장점:
4.567917.추상 적 인 인터페이스 와 결합 을 실현 한다4.567917.추상 과 실현 은 독립 적 으로 확장 할 수 있 고 상대방 에 게 영향 을 주지 않 는 다4.567917.세부 사항 은 고객 에 게 투명 하고 구체 적 인 실현 세부 사항 을 숨 기 는 데 사용 된다단점:시스템 의 복잡 도 증가
필드 사용
우 리 는 브리지 모델 의 사용 장면 을 다시 한 번 살 펴 보고 다음 과 같은 상황 에서 브리지 모델 을 사용 해 야 한다.
만약 에 한 시스템 이 구조 재 의 추상 화 된 역할 과 구체 화 된 역할 사이 에 더 많은 유연성 을 추가 하여 두 차원 에서 정태 적 인 관 계 를 구축 하지 않도록 해 야 한다.
디자인 요구 실현 화 캐릭터 의 어떠한 변화 도 클 라 이언 트 에 영향 을 주지 않 거나 실현 화 캐릭터 의 변 화 는 클 라 이언 트 에 게 완전히 투명 하 다.
여러 플랫폼 을 뛰 어 넘 는 그래 픽 과 창 시스템 이 필요 합 니 다.
하나의 종 류 는 두 개의 독립 적 인 변화 차원 이 존재 하고 두 차원 모두 확장 이 필요 하 다.
실제 응용 브리지 모델 의 예
브리지 모델 도 구체 적 인 시스템 개발 에 자주 사용 된다.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("------------------------");
}
}
/// <summary>
/// (DAL)
/// </summary>
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<string> customers =new List<string>();
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 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.