C\#의 디자인 모델 프로 그래 밍 의 추상 적 인 공장 모델 의 응용 을 상세 하 게 설명 합 니 다.
추상 적 인 공장 모델 은 다른 공장 모델 보다 더욱 추상 적 이 고 추상 적 인 공장 모델 이 여러 개의 추상 적 인 유형 에 적용 되 는 상황 에서 공장 을 통 해 여러 개의 추상 적 인 유형 에서 당신 이 필요 로 하 는 구체 적 인 하위 사례 를 되 돌려 준다.
예 를 들 어 추상 적 인 공장 모델 을 논술 한다.
만약 중국 이 사악 한 나라 에 전쟁 을 일으킨다 면.
중국 장비:폭탄 류,탱크 류,사악 한 나 라 를 처치 합 니 다.
폭탄 류:미사일,핵폭탄;
탱크 류:지프차,메 인 탱크;
전략:
초기 중국 병 공장 생산:미사일,지프차,사악 한 나라 타격.
후기 중국 병 공장 생산:핵폭탄,메 인 탱크,사악 한 나 라 를 파괴 했다.
아 날로 그:
장비 종류 코드:
#region
abstract class Bomb
{
abstract public void baozha();
}
/// <summary>
///
/// </summary>
class daodanBomb :Bomb
{
public override void baozha()
{
Console.WriteLine(" , !");
}
}
/// <summary>
///
/// </summary>
class hedanBomb : Bomb
{
public override void baozha()
{
Console.WriteLine(" , !");
}
}
#endregion
#region
abstract class Tank
{
abstract public void go();
}
/// <summary>
///
/// </summary>
class yueyeTank : Tank
{
public override void go()
{
Console.WriteLine(" , !");
}
}
/// <summary>
///
/// </summary>
class zhuzhanTank : Tank
{
public override void go()
{
Console.WriteLine(" , !");
}
}
#endregion
#region
abstract class chinaFactory
{
//
public abstract Tank CreateTank();
//
public abstract Bomb CreateBomb();
}
//
class qianqiFactory : chinaFactory
{
public override Bomb CreateBomb()
{
//
return new daodanBomb();
}
public override Tank CreateTank()
{
//
return new yueyeTank();
}
}
//
class houqiFactory : chinaFactory
{
public override Bomb CreateBomb()
{
//
return new hedanBomb();
}
public override Tank CreateTank()
{
//
return new zhuzhanTank();
}
}
#endregion :( )
//
class Make
{
//
private Bomb bomb;
private Tank tank;
//
public Make(chinaFactory factory)
{
bomb = factory.CreateBomb();
tank = factory.CreateTank();
}
//
public void warStar()
{
//
bomb.baozha();
//
tank.go();
}
}
public class start
{
public static void Main()
{
//
chinaFactory qianqiMake = new qianqiFactory();
Make qianqi = new Make(qianqiMake);
qianqi.warStar();
// , !!
Console.ReadKey();
//
chinaFactory houqiMake = new houqiFactory();
Make houqi = new Make(houqiMake);
houqi.warStar();
Console.WriteLine(" , ! , !!");
Console.ReadLine();
}
}
추상 적 인 공장 모델 의 정의 와 유형 도추상 적 인 공장 은 고객 이 추상 적 인 인 인 터 페 이 스 를 사용 하여 관련 제품 을 만 들 도록 허용 하고 실제 생산 된 구체 적 인 제품 이 무엇 인지 알 거나 관심 을 가 질 필요 가 없다.이렇게 하면 고객 은 구체 적 인 제품 에서 결합 을 해제 할 수 있다.다음은 추상 적 인 작업 모델 의 유형 도 를 통 해 각 유형 간 의 관 계 를 파악 한다.
추상 공장 의 분석
추상 적 인 공장 모델 은 구체 적 인 제품 의 설립 을 구체 적 인 공장 의 서브 클래스 로 지연 시킨다.이렇게 하면 대상 의 설립 을 밀봉 하면 클 라 이언 트 와 구체 적 인 제품 류 간 의 의존 을 줄 이 고 시스템 의 결합 도 를 낮 출 수 있다.그러면 후기의 유지 와 확장 에 유리 하 다.이것 은 추상 적 인 공장 모델 의 장점 이다.그리고 추상 적 인 모델 은 부족 한 점도 존재 한다.다음은 추상 적 인 공장 의 단점 을 구체 적 으로 살 펴 보 자.
추상 적 인 공장 모델 은 새로운 종류의 제품 의 변 화 를 지원 하기 어렵다.이것 은 추상 적 인 공장 인터페이스 에서 만 들 수 있 는 제품 집합 이 확정 되 었 기 때문이다.만약 에 신제품 을 추가 해 야 한다 면 이때 추상 적 인 공장 의 인 터 페 이 스 를 수정 해 야 한다.그러면 추상 적 인 공장 류 와 모든 하위 류 의 변화 와 관련 되 고'개발-폐쇄'원칙 에 위배 된다.
추상 적 인 공장 의 장단 점 을 알 게 된 후에 어떤 상황 에서 추상 적 인 공장 모델 을 사용 하 는 지 잘 파악 할 수 있다.다음은 추상 적 인 공장 모델 을 사용 하 는 시스템 이 그 몇 가지 전제 에 부합 되 어야 하 는 지 구체 적 으로 살 펴 보 자.
하나의 시스템 은 제품 류 인 스 턴 스 가 어떻게 생 성 되 고 조합 되 며 표현 되 는 지 에 의존 하 는 것 을 요구 하지 않 는 다 는 점 도 모든 공장 모델 응용의 전제 이다.
이 시스템 은 여러 계열 의 제품 이 있 는데,시스템 에 서 는 그 중의 한 계열 의 제품 만 소비 된다.
시스템 은 제품 류 의 라 이브 러 리 를 제공 해 야 한다.모든 제품 이 같은 인터페이스 로 나타 나 고 클 라 이언 트 는 구체 적 인 실현 에 의존 할 필요 가 없다.
.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 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
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에 따라 라이센스가 부여됩니다.