C\#디자인 모델 시리즈 튜 토리 얼-추상 공장 모델

1.개술
추상 적 인 공장 모델 은 한 제품 가족 에 게 통 일 된 창설 인 터 페 이 스 를 제공 했다.이 제품 가족의 특정한 시리즈 가 필요 할 때 추상 적 인 공장 에서 해당 하 는 시 리 즈 를 골 라 구체 적 인 공장 유형 을 만 들 수 있다.
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 실현 도표
//img.jbzj.com/file_images/article/201606/201606021022164.png
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 제품 라 이브 러 리 를 제공 하고 실현 이 아 닌 인 터 페 이 스 를 표시 하려 고 할 때.
이상 이 바로 본문의 전체 내용 입 니 다.여러분 께 참고 가 될 수 있 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기