C\#디자인 모드 시리즈 튜 토리 얼-외관 모드

1.개술
서브 시스템 의 인터페이스 에 일치 하 는 인 터 페 이 스 를 제공 합 니 다.이 모델 은 고 층 인 터 페 이 스 를 정의 합 니 다.이 인 터 페 이 스 는 이 서브 시스템 을 더욱 쉽게 사용 할 수 있 습 니 다.
2.모드 속 캐릭터
2.1 외관 류(Facade):외관 류 는 어떤 서브 시스템 류 가 요 구 를 처리 하 는 지 알 고 고객 의 요 구 를 적당 한 서브 시스템 대상 에 게 대리 한다.
2.2 서브 시스템 클래스 집합(SubSystem Classes):서브 시스템 클래스 집합 은 서브 시스템 의 기능 을 실현 하고 외관 클래스 대상 이 할당 한 임 무 를 처리 합 니 다.
3.패턴 판독
3.1 외관 패턴 의 유형 도
//img.jbzj.com/file_images/article/201606/2016060110264513.png
3.2 외관 모드 의 코드 구현

 /// <summary>
 ///         
 /// </summary>
 public class SubSystemOne
 {
  public void MethodeOne()
  {
   Console.WriteLine("Sub System first method.");
  }
 }

 /// <summary>
 ///        
 /// </summary>
 public class SubSystemTwo
 {
  public void MethodTwo()
  {
   Console.WriteLine("Sub System second method.");
  }
 }

 /// <summary>
 ///        
 /// </summary>
 public class SubSystemThree
 {
  public void MethodThree()
  {
   Console.WriteLine("Sub System third method.");
  }
 }

 /// <summary>
 ///        
 /// </summary>
 public class SubSystemFour
 {
  public void MethodFour()
  {
   Console.WriteLine("Sub System fourth method.");
  }
 }

 /// <summary>
 ///    
 /// </summary>
 public class Facade
 {
  private SubSystemOne one;
  private SubSystemTwo two;
  private SubSystemThree three;
  private SubSystemFour four;

  public Facade()
  {
   one = new SubSystemOne();
   two = new SubSystemTwo();
   three = new SubSystemThree();
   four = new SubSystemFour();
  }

  public void MethodA()
  {
   Console.WriteLine("
Method group A----"); one.MethodeOne(); two.MethodTwo(); four.MethodFour(); } public void MethodB() { Console.WriteLine("
Method group B----"); two.MethodTwo(); three.MethodThree(); } }
   3.3 클 라 이언 트 코드

 class Program
 {
  static void Main(string[] args)
  {
   //   Facade   ,                 
   Facade facade = new Facade();
   facade.MethodA();
   facade.MethodB();

   Console.Read();
  }
 }
   실행 결과
//img.jbzj.com/file_images/article/201606/2016060110264514.png
4.모델 총화
4.1 장점
4.1.1 Facade 모델 은 클 라 이언 트 가 서브 시스템 에 사용 하 는 복잡성 을 낮 추 었 다.
4.1.2 외관 모델 은 클 라 이언 트 와 서브 시스템 의 결합 관 계 를 분산 시 켜 서브 시스템 내부 의 모듈 이 더욱 쉽게 확장 되 고 유지 할 수 있 도록 한다.
4.1.3 Facade 를 합 리 적 으로 사용 함으로써 우리 가 방문 의 차원 을 잘 구분 하 는 데 도움 을 줄 수 있다.
4.2 단점
너무 많 거나 합 리 적 이지 않 은 Facade 도 사람 을 현혹 시 키 기 쉽다.도대체 Facade 를 호출 하 는 것 이 좋 을 까,아니면 모듈 을 직접 호출 하 는 것 이 좋 을 까?
4.3 적용 필드
4.3.1 디자인 을 레이 어 링 할 때 Facade 모델 을 고려 해 야 한다.
4.3.2 개발 단계 에 서브 시스템 은 재 구성 으로 인해 점점 복잡 해 지고 외관 모델 을 증가 하면 간단 한 인 터 페 이 스 를 제공 하여 그들의 의존 을 줄 일 수 있다.
4.3.3 남 겨 진 대형 시스템 을 유지 할 때 이 시스템 은 유지 하기 어렵 고 확장 하기 어렵다.새로운 시스템 에 Facade 류 를 개발 하여 디자인 이 거 칠 거나 고도 로 복잡 한 남 겨 진 코드 의 비교적 뚜렷 하고 간단 한 인 터 페 이 스 를 제공 하여 새로운 시스템 과 Facade 가 이미지 교 류 를 하고 Facade 와 남 겨 진 코드 가 모든 복잡 한 작업 을 할 수 있다.
5.응용 예:분 층 개발 에서 데이터 액세스 층 에 대해 저 희 는 DataAccess 를 대외 인터페이스 로 하여 데이터 베이스 서브 시스템 을 조작 합 니 다.
5.1 실현 도표
//img.jbzj.com/file_images/article/201606/2016060110264515.png
5.2 구현 코드

 public class Employee
 {
  public string Name { get; set; }
  public int Age { get; set; }

  public Salary Salary { get; set; }
 }

 public class Salary
 {
  public DateTime From { get; set; }
  public DateTime To { get; set; }
  public decimal Amount { get; set; }
 }

 public class EmployeeDataAccess
 {
  public void SaveEmployee(Employee employee)
  {
   Console.WriteLine("Save employee to database.");
  }

  public void DeleteEmployee(Employee employee)
  {
   Console.WriteLine("Remode employee from database.");
  }
 }

 public class SalaryDataAccess
 {
  public void SaveSalary(Salary salary)
  {
   Console.WriteLine("Save salary to database.");
  }

  public void DeleteSalary(Salary salary)
  {
   Console.WriteLine("Remove salary from database.");
  }
 }

 /// <summary>
 /// DataAccess             
 /// </summary>
 public class DataAccess
 {
  private EmployeeDataAccess employeeDataAccess = new EmployeeDataAccess();
  private SalaryDataAccess salaryDataAccess = new SalaryDataAccess();

  public void SaveEmployee(Employee employee)
  {
   //          
   employeeDataAccess.SaveEmployee(employee);

   //         
   salaryDataAccess.SaveSalary(employee.Salary);
  }

  public void RemoveEmployee(Employee employee)
  {
   //          
   salaryDataAccess.DeleteSalary(employee.Salary);

   //         
   employeeDataAccess.DeleteEmployee(employee);
  }
 }

5.3 클 라 이언 트 코드

 class Program
 {
  static void Main(string[] args)
  {
   DataAccess.DataAccess dataAccess = new DataAccess.DataAccess();
   DataAccess.Employee employee = new DataAccess.Employee() { Salary = new DataAccess.Salary(), Name = "Wang Kevin", Age = 22 };

   dataAccess.SaveEmployee(employee);
   dataAccess.RemoveEmployee(employee);

   Console.Read();
  }
 }
실행 결과
//img.jbzj.com/file_images/article/201606/2016060110264516.png
이상 이 바로 본문의 전체 내용 입 니 다.여러분 께 참고 가 될 수 있 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기