VB.NET 디자인 패턴 - 3. 추상 팩토리 패턴 (Abstract Factory Pattern)
2023. 4. 21. 10:51ㆍVB.NET/디자인 패턴
추상 팩토리 패턴은 객체 생성에 관한 패턴으로, 객체를 생성하는 방법과 객체들이 서로 연관되어 생성되어야 할 경우에 사용됩니다. 이 패턴은 객체 생성을 추상화하고, 구체적인 클래스를 분리시킴으로써, 코드의 재사용성과 유지보수성을 향상시킵니다.
추상 팩토리 패턴 (Abstract Factory Pattern)
추상 팩토리 패턴의 구조
추상 팩토리 패턴은 Abstract Factory, Concrete Factory, Abstract Product, Concrete Product, Client로 구성됩니다.
- Abstract Factory: 추상 팩토리는 객체 생성에 대한 추상화를 담당합니다.
- Concrete Factory: 구체적인 팩토리 클래스는 추상 팩토리를 구현합니다.
- Abstract Product: 추상 팩토리가 생성할 객체에 대한 추상화를 담당합니다.
- Concrete Product: 구체적인 객체를 생성합니다.
- Client: 추상 팩토리, 추상 객체를 사용합니다.
추상 팩토리 패턴의 예시
윈도우 응용프로그램에서 버튼, 텍스트박스, 라벨 등의 UI 컨트롤을 생성할 때, 추상 팩토리 패턴을 사용할 수 있습니다. 추상 팩토리는 각각의 컨트롤을 생성하는 팩토리를 추상화하고, 각 팩토리는 추상화된 컨트롤을 구현합니다. 이렇게 구현된 추상 팩토리를 사용하여, 클라이언트에서는 각각의 컨트롤을 생성할 때, 추상 팩토리를 사용합니다.
추상 팩토리 패턴의 장점
- 객체 생성에 대한 추상화를 제공하여, 코드의 유연성과 재사용성을 향상시킵니다.
- 각 팩토리 클래스가 추상화된 인터페이스를 구현하므로, 확장성이 높습니다.
- 코드를 간결하고 만들어서 가독성을 높여줍니다.
추상 팩토리 패턴의 단점
- 새로운 제품을 추가하려면, 새로운 추상화된 팩토리 인터페이스를 정의하고, 모든 구체 팩토리 클래스에서 해당 인터페이스를 구현해야 합니다. 이는 코드의 복잡성을 증가시키고, 개발 시간을 늘릴 수 있습니다.
- 팩토리 클래스의 수가 많아질 수록, 코드의 관리가 어려워집니다.
추상 팩토리 패턴의 예제 코드
Public MustInherit Class AbstractFactory
Public MustOverride Function CreateProductA() As AbstractProductA
Public MustOverride Function CreateProductB() As AbstractProductB
End Class
Public Class ConcreteFactory1
Inherits AbstractFactory
Public Overrides Function CreateProductA() As AbstractProductA
Return New ConcreteProductA1()
End Function
Public Overrides Function CreateProductB() As AbstractProductB
Return New ConcreteProductB1()
End Function
End Class
Public Class ConcreteFactory2
Inherits AbstractFactory
Public Overrides Function CreateProductA() As AbstractProductA
Return New ConcreteProductA2()
End Function
Public Overrides Function CreateProductB() As AbstractProductB
Return New ConcreteProductB2()
End Function
End Class
Public MustInherit Class AbstractProductA
Public MustOverride Sub DoSomething()
End Class
Public MustInherit Class AbstractProductB
Public MustOverride Sub DoSomething()
End Class
Public Class ConcreteProductA1
Inherits AbstractProductA
Public Overrides Sub DoSomething()
Console.WriteLine("ConcreteProductA1 DoSomething")
End Sub
End Class
Public Class ConcreteProductA2
Inherits AbstractProductA
Public Overrides Sub DoSomething()
Console.WriteLine("ConcreteProductA2 DoSomething")
End Sub
End Class
Public Class ConcreteProductB1
Inherits AbstractProductB
Public Overrides Sub DoSomething()
Console.WriteLine("ConcreteProductB1 DoSomething")
End Sub
End Class
Public Class ConcreteProductB2
Inherits AbstractProductB
Public Overrides Sub DoSomething()
Console.WriteLine("ConcreteProductB2 DoSomething")
End Sub
End Class
Public Class Client
Private ReadOnly factory As AbstractFactory
Private ReadOnly productA As AbstractProductA
Private ReadOnly productB As AbstractProductB
Public Sub New(factory As AbstractFactory)
Me.factory = factory
productA = factory.CreateProductA()
productB = factory.CreateProductB()
End Sub
Public Sub Run()
productA.DoSomething()
productB.DoSomething()
End Sub
End Class
Module Program
Sub Main(args As String())
Dim factory1 As New ConcreteFactory1()
Dim client1 As New Client(factory1)
client1.Run()
Dim factory2 As New ConcreteFactory2()
Dim client2 As New Client(factory2)
client2.Run()
Console.ReadLine()
End Sub
End Module
마치며...
추상 팩토리(Abstract Factory) 패턴은 팩토리 메소드 패턴보다는 한 단계 높은 추상 요소입니다. 이 패턴을 이용하면 조건에 따라 서로 다른 클래스 객체를 반환하게 됩니다.
관련글 : 2023.04.19 - [VB.NET/디자인 패턴] - VB.NET에서의 디자인 패턴
반응형
'VB.NET > 디자인 패턴' 카테고리의 다른 글
VB.NET 디자인 패턴 - 4. 싱글턴 패턴 (Singleton Pattern) (1) | 2023.04.24 |
---|---|
VB.NET 디자인 패턴 - 2. 팩토리 메소드 패턴 (Factory Method Pattern) (1) | 2023.04.20 |
VB.NET 디자인 패턴 - 1. 단순 팩토리 패턴 (Simple Factory Pattern) (0) | 2023.04.19 |
VB.NET에서의 디자인 패턴 (0) | 2023.04.19 |