[디자인 모드 02] - 단순 공장.

공장 모델 은 호출 자 와 호출 자의 결합 도가 너무 높 은 문 제 를 해결 하 는 것 이다.공장 모델 은 한 걸음 한 걸음 진화 되 어 간단 한 공장 모델 과 추상 적 인 공장 모델 로 나 뉜 다.이 장 은 간단 한 공장 모델 을 소개 한다.우리 의 상황 은 매우 간단 하 다. 우 리 는 제품 A (ProductA) 와 제품 B (ProductB) 가 필요 하 다.
Class ProductA:
namespace SimpleFactory
{
    public class ProductA
    {
        public ProductA()
        {
            Console.WriteLine("ProductA created.");
        }
    }
}

Class ProductB
namespace SimpleFactory
{
    public class ProductB
    {
        public ProductB()
        {
            Console.WriteLine("ProductB created.");
        }
    }
}

호출 자:
namespace SimpleFactory
{
    class Program
    {
        static void Main(string[] args)
        {
            ProductA pA = new ProductA();
            ProductB pB = new ProductB();

            Console.ReadKey();
        }
    }
}

결과:
      더 나 아가 우 리 는 제품 C 가 필요 하 다. 우 리 는 ProductC 류 를 추가 한 다음 에 new ProductC 의 인 스 턴 스 가 필요 하 다.이렇게 하면 우 리 는 많은 종류의 실례 가 나타 날 것 이다.호출 자 는 여러 가지 인용 을 가지 고 있 으 며, 같은 시각 에 우 리 는 하나의 인용 만 있 으 면 충분 하 다.우 리 는 이런 방법 을 개선 할 수 있 습 니까?우 리 는 하나의 제품 류 를 추상 화하 여 ProductA, ProductB 로 하여 금 이 두 가지 유형 을 계승 하 게 한다.
Product:
namespace SimpleFactory
{
    public abstract class Product
    {
        
    }
}

호출 자:
class Program
{
    static void Main(string[] args)
    {
        Product p = null;
        p = new ProductA();
        p = new ProductB();

        Console.ReadKey();
    }
}

ProductA, ProductB 는 변 하지 않 습 니 다.
우 리 는 부모 클래스 의 인용 이 하위 클래스 를 가리 키 는 인 스 턴 스 를 사용 하 는 것 을 볼 수 있 습 니 다. 이 는 같은 시간 에 하나의 인용 만 있 습 니 다.출력 구조 가 변 하지 않 습 니 다.
더 나 아가 우 리 는 현재 구조 대상 에 있 습 니 다. 인용 문 제 를 해결 하 였 음 에 도 불구 하고 우 리 는 호출 자 스스로 대상 을 만 들 지 못 하 게 할 수 있 습 니까? 답 은 가능 합 니 다.
우 리 는 제품 공장 (ProductFactory) 을 만 든 다음 에 제품 공장 이 제품 유형 (ProductType) 에 따라 제품 을 구성 하도록 한다. 호출 자 는 공장 에 내 가 어떤 종류의 제품 이 필요 한 지 알려 주면 된다.
ProductType:
namespace SimpleFactory
{
    public enum ProductType
    {
        ProductA,
        ProductB
    }
}

ProductFactory
namespace SimpleFactory
{
    public class ProductFactory
    {
        public Product CreateProduct(ProductType type)
        {
            Product p = null;
            switch (type)
            { 
                case ProductType.ProductA:
                    p = new ProductA();
                    break;
                case ProductType.ProductB:
                    p = new ProductB();
                    break;
            }

            return p;
        }
    }
}

호출 자 는 매우 간단 하 다.
class Program
{
   static void Main(string[] args)
   {
       ProductFactory pf = new ProductFactory();
       Product p = null;
       p = pf.CreateProduct(ProductType.ProductA);
       p = pf.CreateProduct(ProductType.ProductB);

       Console.ReadKey();
    }
}

      단순 공정 은 호출 자 와 서비스 자의 직책 을 분리 하여 SOLID 원칙 중 하나 인 단일 직책 원칙 에 더욱 부합된다.간단 한 공장 은 아직 '확장 개방, 폐쇄 수정' 의 원칙 에 부합 되 지 않 는 다. 제품 을 늘 리 려 면 공장 논 리 를 수정 해 야 하기 때문에 추상 적 인 공장 모델 이 이 문 제 를 해결 할 것 이다.
      공장 모드 는 일반적으로 응용 프로그램 이 다 중 데이터베이스 에 지원 하 는 데이터베이스 접근 모듈 에 응용 된다.

좋은 웹페이지 즐겨찾기