C\#의 디자인 모델 프로 그래 밍 의 추상 적 인 공장 모델 의 응용 을 상세 하 게 설명 합 니 다.

8102 단어 C#디자인 모드
여기 서 먼저 생활 속 추상 적 인 공장 의 예 를 들 어 추상 적 인 공장 을 실현 한 다음 에 추상 적 인 공장 의 정의 와 UML 그림 을 제시 하여 사람들 이 추상 적 인 공장 모델 을 잘 파악 하도록 도와 준다.또한 사람들 이 이해 할 때 추상 적 인 공장 생활 에서 사례 의 실제 와 그의 정 의 를 대조 하여 추상 적 인 공장 의 UML 그림 이 해 를 강화 할 수 있다.추상 적 인 공장 모델 은 다른 공장 모델 보다 더욱 추상 적 이 고 추상 적 인 공장 모델 이 여러 개의 추상 적 인 유형 에 적용 되 는 상황 에서 공장 을 통 해 여러 개의 추상 적 인 유형 에서 당신 이 필요 로 하 는 구체 적 인 하위 사례 를 되 돌려 준다.
추상 적 인 공장 모델 은 다른 공장 모델 보다 더욱 추상 적 이 고 추상 적 인 공장 모델 이 여러 개의 추상 적 인 유형 에 적용 되 는 상황 에서 공장 을 통 해 여러 개의 추상 적 인 유형 에서 당신 이 필요 로 하 는 구체 적 인 하위 사례 를 되 돌려 준다.
예 를 들 어 추상 적 인 공장 모델 을 논술 한다.
만약 중국 이 사악 한 나라 에 전쟁 을 일으킨다 면.
중국 장비:폭탄 류,탱크 류,사악 한 나 라 를 처치 합 니 다.
폭탄 류:미사일,핵폭탄;
탱크 류:지프차,메 인 탱크;
전략:
초기 중국 병 공장 생산:미사일,지프차,사악 한 나라 타격.
후기 중국 병 공장 생산:핵폭탄,메 인 탱크,사악 한 나 라 를 파괴 했다.
아 날로 그:
2016217144844885.png (1091×595)
장비 종류 코드:

  #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();
    }
  }

추상 적 인 공장 모델 의 정의 와 유형 도
추상 적 인 공장 은 고객 이 추상 적 인 인 인 터 페 이 스 를 사용 하여 관련 제품 을 만 들 도록 허용 하고 실제 생산 된 구체 적 인 제품 이 무엇 인지 알 거나 관심 을 가 질 필요 가 없다.이렇게 하면 고객 은 구체 적 인 제품 에서 결합 을 해제 할 수 있다.다음은 추상 적 인 작업 모델 의 유형 도 를 통 해 각 유형 간 의 관 계 를 파악 한다.
2016217144927859.png (633×457)
추상 공장 의 분석
추상 적 인 공장 모델 은 구체 적 인 제품 의 설립 을 구체 적 인 공장 의 서브 클래스 로 지연 시킨다.이렇게 하면 대상 의 설립 을 밀봉 하면 클 라 이언 트 와 구체 적 인 제품 류 간 의 의존 을 줄 이 고 시스템 의 결합 도 를 낮 출 수 있다.그러면 후기의 유지 와 확장 에 유리 하 다.이것 은 추상 적 인 공장 모델 의 장점 이다.그리고 추상 적 인 모델 은 부족 한 점도 존재 한다.다음은 추상 적 인 공장 의 단점 을 구체 적 으로 살 펴 보 자.
추상 적 인 공장 모델 은 새로운 종류의 제품 의 변 화 를 지원 하기 어렵다.이것 은 추상 적 인 공장 인터페이스 에서 만 들 수 있 는 제품 집합 이 확정 되 었 기 때문이다.만약 에 신제품 을 추가 해 야 한다 면 이때 추상 적 인 공장 의 인 터 페 이 스 를 수정 해 야 한다.그러면 추상 적 인 공장 류 와 모든 하위 류 의 변화 와 관련 되 고'개발-폐쇄'원칙 에 위배 된다.
추상 적 인 공장 의 장단 점 을 알 게 된 후에 어떤 상황 에서 추상 적 인 공장 모델 을 사용 하 는 지 잘 파악 할 수 있다.다음은 추상 적 인 공장 모델 을 사용 하 는 시스템 이 그 몇 가지 전제 에 부합 되 어야 하 는 지 구체 적 으로 살 펴 보 자.
하나의 시스템 은 제품 류 인 스 턴 스 가 어떻게 생 성 되 고 조합 되 며 표현 되 는 지 에 의존 하 는 것 을 요구 하지 않 는 다 는 점 도 모든 공장 모델 응용의 전제 이다.
이 시스템 은 여러 계열 의 제품 이 있 는데,시스템 에 서 는 그 중의 한 계열 의 제품 만 소비 된다.
시스템 은 제품 류 의 라 이브 러 리 를 제공 해 야 한다.모든 제품 이 같은 인터페이스 로 나타 나 고 클 라 이언 트 는 구체 적 인 실현 에 의존 할 필요 가 없다.
.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 을 연결 하 는 구체 적 인 공장 의 실현 도 사용자 정의 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기