C\#디자인 모드 시리즈 튜 토리 얼-외관 모드
서브 시스템 의 인터페이스 에 일치 하 는 인 터 페 이 스 를 제공 합 니 다.이 모델 은 고 층 인 터 페 이 스 를 정의 합 니 다.이 인 터 페 이 스 는 이 서브 시스템 을 더욱 쉽게 사용 할 수 있 습 니 다.
2.모드 속 캐릭터
2.1 외관 류(Facade):외관 류 는 어떤 서브 시스템 류 가 요 구 를 처리 하 는 지 알 고 고객 의 요 구 를 적당 한 서브 시스템 대상 에 게 대리 한다.
2.2 서브 시스템 클래스 집합(SubSystem Classes):서브 시스템 클래스 집합 은 서브 시스템 의 기능 을 실현 하고 외관 클래스 대상 이 할당 한 임 무 를 처리 합 니 다.
3.패턴 판독
3.1 외관 패턴 의 유형 도
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();
}
}
실행 결과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 실현 도표
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();
}
}
실행 결과이상 이 바로 본문의 전체 내용 입 니 다.여러분 께 참고 가 될 수 있 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.