추상 팩토리 (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 |