C\#디자인 모드 프로 그래 밍 의 브리지 모드 를 간단하게 이해 합 니 다.

7007 단어 C#디자인 모드
브리지 모델 의 개념
정의:추상 적 인 부분 과 실현 부분 을 분리 하여 독립 적 으로 변화 시 킬 수 있 도록 한다.
이해:한 대상 의 변 화 를 해결 하기 위해 여러 대상 이 변화 에 영향 을 미 치기 위해 구체 적 으로 대상 을 추상 화하 여 대상 과 변화 요소 의 결합 도 를 낮 추고 시스템 의 유지 가능성 과 확장 성 을 향상 시 켜 야 한다.
예:
핸드폰 시스템 의 생태 권 문제:
잔소리:알다 시 피 wp 의 생태 권 은 상대 적 으로 시스템 이 좋 지 않 습 니 다.여러분 은 노력 해 야 합 니 다.노키아 가 신단 에서 내 려 오고 wp 는 신단 에 올 라 가 야 합 니 다.
wp/ios 시스템 클래스:소프트웨어 를 실행 하면 본 운영 환경 에서 의 모든 소프트웨어 를 탑재 할 수 있 습 니 다.시스템 이 추가 되면 소프트웨어 는 시스템 버 전 을 하나 더 만들어 야 합 니 다.
weixin/kuwo 소프트웨어 클래스:소프트웨어 를 실행 하기 시 작 했 습 니 다.소프트웨어 를 새로 추가 하면 여러 시스템 버 전 을 만들어 야 합 니 다.
실현:iso 와 wp 시스템 에서 실행 되 며 다양한 소프트웨어 가 있 습 니 다.
아 날로 그:
2016217162841759.png (835×294)
다음은 구체 적 인 코드 에 따라 브리지 모델 을 알 아 보 겠 습 니 다.
소프트웨어 코드:

 //  
  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);
      }
    }
       
  }


좋은 웹페이지 즐겨찾기