C\#디자인 모델 시리즈 튜 토리 얼-추상 공장 모델
추상 적 인 공장 모델 은 한 제품 가족 에 게 통 일 된 창설 인 터 페 이 스 를 제공 했다.이 제품 가족의 특정한 시리즈 가 필요 할 때 추상 적 인 공장 에서 해당 하 는 시 리 즈 를 골 라 구체 적 인 공장 유형 을 만 들 수 있다.
2.추상 적 인 공장 모델 에서 의 역할
2.1 추상 공장(AbstractFactory):이 역할 을 맡 은 것 은 공장 방법 모델 의 핵심 이 고 응용 시스템 의 상업 논리 와 무관 하 다.
2.2 구체 적 인 공장(Concrete Factory):이 역할 은 클 라 이언 트 의 호출 에 의 해 제품 의 인 스 턴 스 를 직접 만 듭 니 다.이 역할 은 적당 한 제품 대상 을 선택 하 는 논 리 를 포함 하고 이 논 리 는 응용 시스템 의 상업 논리 와 밀접 한 관 계 를 가진다.
2.3 추상 적 인 제품(AbstractProduct):이 역할 을 맡 은 종 류 는 공장 방법 모델 이 만 든 대상 의 부모 클래스 또는 이들 이 공동으로 가지 고 있 는 인터페이스 이다.
2.4 구체 적 인 제품(Concrete Product):추상 적 인 공장 모델 이 만 든 모든 제품 대상 은 특정한 구체 적 인 제품 류 의 사례 이다.이것 은 클 라 이언 트 가 최종 적 으로 필요 로 하 는 것 으로 그 내부 에 응용 시스템 의 상업 논리 가 가득 할 것 이다.
3.실례:데이터베이스 교체.기 존 시스템 은 SqlServer 데이터 베 이 스 를 사용 합 니 다.Licence 는 비용 을 지불 합 니 다.어떤 고객 은 Access 와 같은 무료 데이터 베 이 스 를 사용 하고 싶 습 니 다.어떤 고객 들 은 다른 데이터베이스 서비스 업 체 의 Licence 를 가지 고 있 으 며,그들 도 따로 비용 을 지불해 야 하 는 SqlServer 를 사용 하고 싶 지 않다.
3.1 이 문 제 를 해결 하 는 근본 은 응용 프로그램 과 데이터 베 이 스 를 결합 시 켜 응용 프로그램 이 구체 적 인 데이터 베이스 에 의존 하지 않도록 하 는 것 이다.추상 적 인 공장 은 우리 에 게 해결 방안 을 제공 해 주 었 다.
3.2 실현 도표
3.3 실현 코드
3.3.1 추상 적 인 공장 류 는 관련 되 거나 서로 의존 하 는 대상 을 만 드 는 인 터 페 이 스 를 제공한다.
/// <summary>
///
/// </summary>
public interface IDatabaseFactory
{
IEmployee CreateEmployee();
IUser CreateUser();
}
3.3.2 구체 적 인 공장 유형 은 SqlServer 를 만 들 거나 Access 구체 적 인 제품 의 실현 을 제공 합 니 다.
/// <summary>
/// SqlServer
/// </summary>
public class SqlServerDatabaseFactory : IDatabaseFactory
{
public IEmployee CreateEmployee()
{
return new SqlEmployee();
}
public IUser CreateUser()
{
return new SqlUser();
}
}
/// <summary>
/// Access
/// </summary>
public class AccessDatabaseFactory : IDatabaseFactory
{
public IEmployee CreateEmployee()
{
return new AccessEmployee();
}
public IUser CreateUser()
{
return new AccessUser();
}
}
3.3.3 두 개의 추상 적 인 제품 은 IUser 와 IEmployee 이다.
/// <summary>
///
/// </summary>
public interface IUser
{
User GetUser();
bool SaveUser();
}
/// <summary>
///
/// </summary>
public interface IEmployee
{
Employee GetEmployee();
bool SaveEmployee();
}
3.3.4 구체 적 인 제품 의 실현
/// <summary>
/// SqlServer User
/// </summary>
public class SqlUser : IUser
{
public User GetUser()
{
return null;
}
public bool SaveUser()
{
return false;
}
}
/// <summary>
/// SqlServer Employee
/// </summary>
public class SqlEmployee : IEmployee
{
public SqlEmployee()
{
}
public Employee GetEmployee()
{
return null;
}
public bool SaveEmployee()
{
return false;
}
}
/// <summary>
/// Access User
/// </summary>
public class AccessUser : IUser
{
public AccessUser()
{
}
public User GetUser()
{
return null;
}
public bool SaveUser()
{
return false;
}
}
/// <summary>
/// Access Employee
/// </summary>
public class AccessEmployee : IEmployee
{
public AccessEmployee()
{
}
public Employee GetEmployee()
{
return null;
}
public bool SaveEmployee()
{
return false;
}
}
4.모델 총화4.1 장점
4.1.1 구체 적 인 제품 은 고객 코드 에서 분리 된다.
4.1.2 제품 의 시 리 즈 를 바 꾸 기 쉽다(예 를 들 어 SqlServer 제품 시리즈,Access 제품 시리즈)
4.1.3 일련의 제품 족 을 하나 로 통일 시 켜 서 만든다.
4.2 단점
제품 족 에서 새로운 제품 을 확장 하 는 것 은 매우 어렵다.추상 적 인 공장 의 인 터 페 이 스 를 수정 해 야 한다.예 를 들 어 제품 Customer 를 추가 하 는 것 이 매우 어렵다.
4.3 실 용 범위
4.3.1 하나의 시스템 이 제품 의 창설,조합 과 표시 에 독립 해 야 할 때.
4.3.2 하나의 시스템 이 여러 제품 시리즈 중 하나 로 설정 되 어야 할 때.
4.3.3 일련의 관련 제품 대상 의 디자인 을 강조 하여 공동으로 사용 할 때.
4.3.4 제품 라 이브 러 리 를 제공 하고 실현 이 아 닌 인 터 페 이 스 를 표시 하려 고 할 때.
이상 이 바로 본문의 전체 내용 입 니 다.여러분 께 참고 가 될 수 있 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.