C \ # 디자인 모델 --- 추상 공장 모델
머리말
지난 주제 에서 공장 방법 모델 을 소개 했다. 공장 방법 모델 은 간단 한 공장 모델 의 단점 을 극복 하기 위해 디자인 된 것 이다. 간단 한 공장 모델 의 공장 류 는 제품 류 의 증가 에 따라 추가 코드 를 추가 해 야 한다). 공장 방법 모델 은 모든 구체 적 인 공장 류 는 하나의 사례 만 완성 하기 때문에 확장 성 이 좋다.그러나 현실 생활 에서 한 공장 이 하나의 제품 만 만 만 드 는 사례 가 매우 적다. 현재 의 공장 이 다 원화 되 었 기 때문에 한 공장 이 일련의 제품 을 만 들 었 다. 만약 에 우리 가 이런 시스템 을 설계 하려 고 할 때 공장 방법 모델 은 여기 서 적용 되 지 않 는 다. 그리고 추상 적 인 공장 모델 은 일련의 제품 건설 문 제 를 잘 해결 할 수 있다.이것 은 본 주제 에서 소개 하고 자 하 는 내용 이다.
2. 추상 공장 상세 소개
여기 서 먼저 생활 속 추상 적 인 공장 의 예 를 들 어 추상 적 인 공장 을 실현 한 다음 에 추상 적 인 공장 의 정의 와 UML 그림 을 제시 하여 사람들 이 추상 적 인 공장 모델 을 잘 파악 하도록 도와 준다. 또한 사람들 이 이해 할 때 추상 적 인 공장 생활 에서 사례 의 실제 와 그의 정 의 를 대조 하여 추상 적 인 공장 의 UML 그림 이 해 를 강화 할 수 있다.
2.1 추상 적 인 공장 의 구체 적 인 실현
다음은 생활 속 의 '절미' 체인점 의 예 로 추상 적 인 공장 모델 을 실현 한다.예 를 들 어 절 미 오리 목 은 강서 남창 과 상하 이에 지점 을 열 고 싶 지만 현지인 들 의 입맛 이 다 르 기 때문에 남창 에 있 는 모든 절 미 된 음식 은 매 운 것 을 만 들 고 상하 이 는 매 운 것 을 좋아 하지 않 기 때문에 상하 이의 모든 절 미 된 음식 은 남창 처럼 매 운 것 을 만 들 지 않 는 다.그러나 이런 점 이 다 르 기 때문에 남창 절미 공장 과 상하 이의 절미 공장 은 모든 절미 제품 을 생 성 하 는 것 이 다르다. 즉, 특정한 구체 적 인 공장 은 일련의 제품 (절미 모든 음식 을 가리 키 는 말) 의 건설 업 무 를 책임 져 야 한다. 다음은 추상 적 인 공장 모델 을 어떻게 사용 하여 이런 상황 을 실현 하 는 지 구체 적 으로 살 펴 보 자.
/// <summary>
///
/// , ,
///
/// </summary>
class Client
{
static void Main(string[] args)
{
//
AbstractFactory nanChangFactory = new NanChangFactory();
YaBo nanChangYabo = nanChangFactory.CreateYaBo();
nanChangYabo.Print();
YaJia nanChangYajia= nanChangFactory.CreateYaJia();
nanChangYajia.Print();
//
AbstractFactory shangHaiFactory = new ShangHaiFactory();
shangHaiFactory.CreateYaBo().Print();
shangHaiFactory.CreateYaJia().Print();
Console.Read();
}
}
/// <summary>
/// ,
/// </summary>
public abstract class AbstractFactory
{
// , ,
public abstract YaBo CreateYaBo();
public abstract YaJia CreateYaJia();
}
/// <summary>
///
/// </summary>
public class NanChangFactory : AbstractFactory
{
//
public override YaBo CreateYaBo()
{
return new NanChangYaBo();
}
//
public override YaJia CreateYaJia()
{
return new NanChangYaJia();
}
}
/// <summary>
///
/// </summary>
public class ShangHaiFactory : AbstractFactory
{
//
public override YaBo CreateYaBo()
{
return new ShangHaiYaBo();
}
//
public override YaJia CreateYaJia()
{
return new ShangHaiYaJia();
}
}
/// <summary>
/// ,
/// </summary>
public abstract class YaBo
{
/// <summary>
/// ,
/// </summary>
public abstract void Print();
}
/// <summary>
/// ,
/// </summary>
public abstract class YaJia
{
/// <summary>
/// ,
/// </summary>
public abstract void Print();
}
/// <summary>
/// , ,
/// </summary>
public class NanChangYaBo : YaBo
{
public override void Print()
{
Console.WriteLine(" ");
}
}
/// <summary>
///
/// </summary>
public class ShangHaiYaBo : YaBo
{
public override void Print()
{
Console.WriteLine(" ");
}
}
/// <summary>
///
/// </summary>
public class NanChangYaJia : YaJia
{
public override void Print()
{
Console.WriteLine(" ");
}
}
/// <summary>
///
/// </summary>
public class ShangHaiYaJia : YaJia
{
public override void Print()
{
Console.WriteLine(" ");
}
}
2.2 추상 적 인 공장 모델 의 정의 와 유형
위의 코드 에 상세 한 주석 이 있 습 니 다. 여 기 는 위의 코드 를 설명 하지 않 겠 습 니 다. 다음은 추상 적 인 공장 모델 의 정 의 를 구체 적 으로 보 겠 습 니 다. (정 의 를 이해 하면 위의 실현 을 참고 하여 이 해 를 깊이 할 수 있 습 니 다)
추상 적 인 공장 모델: 제품 을 만 드 는 인 터 페 이 스 를 제공 하여 관련 되 거나 의존 하 는 대상 을 만 드 는 것 을 책임 지고 구체 적 인 유형 을 명확 하 게 지정 하지 않 습 니 다.
추상 적 인 공장 은 고객 이 추상 적 인 인 인 터 페 이 스 를 사용 하여 관련 제품 을 만 들 도록 허용 하고 실제 생산 된 구체 적 인 제품 이 무엇 인지 알 거나 관심 을 가 질 필요 가 없다.이렇게 하면 고객 은 구체 적 인 제품 에서 결합 을 해제 할 수 있다.다음은 추상 적 인 작업 모델 의 유형 도 를 통 해 각 유형 간 의 관 계 를 파악 한다.
2.3 추상 적 인 공장 의 수요 변경
위의 추상 적 인 공장 의 실현 을 본 후에 '절미' 회사 가 호 남 에 지점 을 하나 열 려 면 어떻게 합 니까?호 남 사람들 은 매 운 것 을 좋아 하기 때문에 추상 적 인 공장 모델 을 응용 한 시스템 이 이런 수요 에 어떻게 대응 하 는 지 구체 적 으로 살 펴 보 자.
/// <summary>
/// ,
///
/// </summary>
public class HuNanFactory : AbstractFactory
{
//
public override YaBo CreateYaBo()
{
return new HuNanYaBo();
}
//
public override YaJia CreateYaJia()
{
return new HuNanYajia();
}
}
/// <summary>
///
/// </summary>
public class HuNanYaBo : YaBo
{
public override void Print()
{
Console.WriteLine(" ");
}
}
/// <summary>
///
/// </summary>
public class HuNanYajia : YaJia
{
public override void Print()
{
Console.WriteLine(" ");
}
}
이때 세 가지 유형 만 추가 해 야 한다. 하 나 는 호 남 의 구체 적 인 공장 류 로 호 남 의 맛 을 가 진 오리 목 과 오리 프레임 을 만 드 는 것 을 책임 지고 다른 두 가 지 는 호 남 의 맛 을 가 진 오리 목 류 와 오리 프레임 류 이다.상기 코드 를 통 해 알 수 있 듯 이 추상 적 인 공장 은 시리즈 제품 의 변화 에 대해 '개방 - 폐쇄' 원칙 (시스템 이 확장 개방, 수정 폐쇄 를 요구 하 는 것 을 말한다) 을 지원 하고 확장 이 매우 간편 하지만 추상 적 인 공장 은 신제품 을 추가 하 는 상황 에 대해 '개방 - 폐쇄' 를 지원 하지 않 는 다."원칙, 이것 도 추상 적 인 공장 의 단점 인 데 그 점 은 네 번 째 부분 에서 자세히 소개 하 겠 습 니 다.
3. 추상 공장 의 분석
추상 적 인 공장 모델 은 구체 적 인 제품 의 설립 을 구체 적 인 공장 의 서브 클래스 로 지연 시킨다. 이렇게 하면 대상 의 설립 을 밀봉 하면 클 라 이언 트 와 구체 적 인 제품 류 간 의 의존 을 줄 이 고 시스템 의 결합 도 를 낮 출 수 있다. 그러면 후기의 유지 와 확장 에 유리 하 다. 이것 은 추상 적 인 공장 모델 의 장점 이다. 그리고 추상 적 인 모델 은 부족 한 점도 존재 한다.추상 적 인 공장 의 단점 을 구체 적 으로 살 펴 보 자.
추상 적 인 공장 모델 은 새로운 종류의 제품 변 화 를 지원 하기 어렵다. 추상 적 인 공장 인터페이스 에서 만 들 수 있 는 제품 집합 이 확정 되 었 기 때문이다. 신제품 을 추가 해 야 한다 면 추상 적 인 공장 의 인 터 페 이 스 를 수정 해 야 한다. 그러면 추상 적 인 공장 류 와 모든 하위 류 의 변화 와 관련 되 고 '개발 - 폐쇄' 원칙 에 위배 된다.
추상 적 인 공장 의 장단 점 을 알 게 된 후에 어떤 상황 에서 추상 적 인 공장 모델 을 사용 하 는 지 잘 파악 할 수 있다. 다음은 추상 적 인 공장 모델 을 사용 하 는 시스템 이 그 몇 가지 전제 에 부합 되 어야 하 는 지 구체 적 으로 살 펴 보 자.
하나의 시스템 은 제품 류 인 스 턴 스 가 어떻게 생 성 되 고 조합 되 며 표현 되 는 지 에 의존 하 는 것 을 요구 하지 않 는 다. 이것 도 모든 공장 모델 응용의 전제 이다. 이 시스템 은 여러 개의 시리즈 제품 이 있 는데 시스템 에서 그 중의 한 시리즈 제품 만 소비 한다 .
시스템 은 하나의 제품 류 의 라 이브 러 리 를 제공 해 야 한다. 모든 제품 이 같은 인터페이스 로 나타 나 고 클 라 이언 트 는 구체 적 인 실현 에 의존 할 필요 가 없다. 4.. NET 에서 추상 적 인 공장 모델 실현
추상 적 인 공장 모델 은 실제 에서 의 응용 도 상당히 빈번 하 다. 그러나 우리. NET 라 이브 러 리 에 도 추상 적 인 공장 모델 을 응용 하 는 유형 이 존재 한다. 이런 유형 은 바로 System. Data. Common. DbProvider Factory 이다. 이런 유형 은 System. Data. dll 프로그램 에 집중 되 고 추상 적 인 공장 모델 에서 추상 적 인 공장 역할 을 한다. 우 리 는 reflector 반 컴 파일 도구 로 이러한 실현 을 볼 수 있다.:
///
/// ,
/// DbConnection ( , YaBo )、DbCommand 、DbDataAdapter , ,
public abstract class DbProviderFactory
{
//
protected DbProviderFactory();
public virtual DbCommand CreateCommand();
public virtual DbCommandBuilder CreateCommandBuilder();
public virtual DbConnection CreateConnection();
public virtual DbConnectionStringBuilder CreateConnectionStringBuilder();
public virtual DbDataAdapter CreateDataAdapter();
public virtual DbDataSourceEnumerator CreateDataSourceEnumerator();
public virtual DbParameter CreateParameter();
public virtual CodeAccessPermission CreatePermission(PermissionState state);
}
DbProviderFactory
클래스 는 추상 적 인 공장 류 로 데이터베이스 연결 을 만 들 때 필요 한 대상 집합 인 터 페 이 스 를 제공 합 니 다. 실제 생 성 된 작업 은 하위 공장 에서 진행 되 고 마이크로소프트 는 SQL Server 데이터 베 이 스 를 사용 하기 때문에 SQL Server 데 이 터 를 연결 하 는 구체 적 인 공장 을 제공 합 니 다. 구체 적 인 코드 는 컴 파일 도구 로 볼 수 있 습 니 다. 구체 적 인 코드 는 다음 과 같 습 니 다.
/// , SQL Server
public sealed class SqlClientFactory : DbProviderFactory, IServiceProvider
{
// Fields
public static readonly SqlClientFactory Instance = new SqlClientFactory();
//
private SqlClientFactory()
{
}
//
public override DbCommand CreateCommand()
{ //
return new SqlCommand();
}
public override DbCommandBuilder CreateCommandBuilder()
{
return new SqlCommandBuilder();
}
public override DbConnection CreateConnection()
{
return new SqlConnection();
}
public override DbConnectionStringBuilder CreateConnectionStringBuilder()
{
return new SqlConnectionStringBuilder();
}
public override DbDataAdapter CreateDataAdapter()
{
return new SqlDataAdapter();
}
public override DbDataSourceEnumerator CreateDataSourceEnumerator()
{
return SqlDataSourceEnumerator.Instance;
}
public override DbParameter CreateParameter()
{
return new SqlParameter();
}
public override CodeAccessPermission CreatePermission(PermissionState state)
{
return new SqlClientPermission(state);
}
}
마이크로소프트 는 SQL Server 를 연결 하 는 구체 적 인 공장 의 실현 만 제 시 했 기 때문에 Oracle, MySql 을 연결 하 는 구체 적 인 공장 의 실현 도 사용자 정의 할 수 있 습 니 다.
총화
여기까지 추상 적 인 공장 모델 에 대한 소 개 는 끝나 고 다음 주제 에 건축 모델 을 소개 할 것 이다.
프로그램 원본: 클릭 하여 링크 열기
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.