추상 팩토리 (Abstract Factory) 패턴 생성 패턴
관련성이 있는 여러 객체로 이루어진 구조의 생성을 정의합니다.
  | 
클라이언트는 상황에 따라 다른 구조를 생성해야 할 때가 있다. 그렇다면, enumeration이나 string을 인자로 받아 switch-case 문으로 하여금 생성할 구조의 속성을 지정할 수 있으나, 생성해야 할 구조의 가짓수가 많아질수록 생성에 대한 부가적인 기능을 추가하기 위해 함수를 수정해야 함으로 유연성이 떨어질 수 있다.
그래서 추상 팩토리 패턴은 구조의 생성을 수행하는 팩토리 클래스를 정의하여 클라이언트가 팩토리 클래스의 인터페이스를 통해 구조를 생성할 수 있게 한다. 추상 팩토리 구조의 생성에 관한 구체적인 내용이 팩토리 클래스에서 구현되기에 구조의 생성에 대한 유연한 확장을 지원하고 클라이언트는 어떤 팩토리 객체를 사용하냐에 따라 다른 구조를 클라이언트가 세부 클래스를 이해할 필요 없이 제공받을 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60  | public class PatternAbstractFactory {     public interface IAbstractFactory     {         IProduct CreateProduct();     }     public class AbstractFactoryA : IAbstractFactory     {         public IProduct CreateProduct()         {             return new ProductA();         }     }     public class AbstractFactoryB : IAbstractFactory     {         public IProduct CreateProduct()         {             return new ProductB();         }     }     public interface IProduct     {         void Operation();     }     public class ProductA : IProduct     {         public void Operation()         {             Console.WriteLine("Operating ProductA");         }     }     public class ProductB : IProduct     {         public void Operation()         {             Console.WriteLine("Operating ProductB");         }     }     public static void Main(string[] args)     {         IAbstractFactory abstractFactory;         IProduct product;         abstractFactory = new AbstractFactoryA();         product = abstractFactory.CreateProduct();         product.Operation();         abstractFactory = new AbstractFactoryB();         product = abstractFactory.CreateProduct();         product.Operation();     } }  | cs | 
1 2 3  | Operating ProductA Operating ProductB Press any key to continue . . .  | cs | 
'PROGRAMMING > Design Pattern' 카테고리의 다른 글
| [GoF] 팩토리 메서드 (Factory Method) 패턴 (0) | 2019.03.09 | 
|---|---|
| [GoF] 빌더 (Builder) 패턴 (0) | 2019.03.09 | 
| [GoF] 경량 (Flyweight) 패턴 (0) | 2019.03.09 | 
| [GoF] 파사드 (Facade) 패턴 (0) | 2019.03.09 | 
| [GoF] 데코레이터 (Decorator) 패턴 (0) | 2019.03.09 |