1.1. Intent ¶
ꡬ체μ μΈ ν΄λμ€λ₯Ό μ μνμ§ μκ³ μ, μ°κ΄λκ±°λ μμ‘΄μ μΈ κ°μ²΄μ§ν©μ λ§λ€μ μλ μΈν°νμ΄μ€λ₯Ό μ 곡νλ€.
1.3. Motivation ¶
μ μ μΈν°νμ΄μ€ ν΄ν·μ λ€μν 룩μ€ν κΈ°μ€μ μ 곡νλλ‘ κ³ λ €νλ€. λ€λ₯Έ 룩μ€νμ μ€ν¬λ‘€λ°, μλμ°, κ·Έλ¦¬κ³ λ²νΌμ²λΌ λ€λ₯Έ λͺ¨μ΅κ³Ό νλμμμ μ μ μΈν°νμ΄μ€ Widgetμ μ 곡νλ€. μ΄μκ°λ₯ν 룩μ€ν κΈ°μ€μ μν΄μλ, κ°λ³μ 룩μ€ν Widgetμ μν μ΄λ€ μ ν리μΌμ΄μ
μ νλ-μ½λ κ° μλμ΄μΌ νλ€. μ¦μμΌλ‘ μ μν 룩μ€ν ν΄λμ€λ λμ€μ 룩μ€νμ λ°κΎΈκΈ° μ΄λ ΅κ² λ§λ λ€.
μ΄ λ¬Έμ λ κΈ°λ³Έμ μΈ Widgetμ μΈν°νμ΄μ€λ₯Ό μ μν abstract WidgetFactory ν΄λμ€λ₯Ό μ μν¨μΌλ‘μ¨ ν΄κ²°ν μ μλ€. λν λͺ¨λ μ’
λ₯μ Widgetμλ μΆμν΄λμ€κ° μ‘΄μ¬νλ€, κ·Έλ¦¬κ³ κ΅¬μ²΄μ μΈ μλΈ ν΄λμ€λ Widgetμ μμν΄μ 룩μ€ν κΈ°λ³Έμ μ μνλ€. WidgetFactoryμ μΈν°νμ΄μ€λ κ°κ°μ μΆμ Widget ν΄λμ€μ μλ‘μ΄ κ°μ²΄λ₯Ό λ°ννλ κΈ°λ₯μ κ°μ§κ³ μλ€. ν΄λΌμ΄μΈνΈλ μ΄λ° κΈ°λ₯μ μνν΄μ Widget μΈμ€ν΄μ€λ₯Ό λ§λ λ€. κ·Έλ¬λ ν΄λΌμ΄μΈνΈλ μ¬μ©νλ ν΄λμ€μ ꡬ체μ μΈ λ΄μ©μ λν΄μλ μ κ²½μ°μ§ μλλ€. μ΄μ²λΌ ν΄λΌμ΄μΈνΈλ μΌλ°μ μΈ(?) 룩μ€νμ λ
립μ±μ μμ‘΄νλ€.
κ°κ°μ 룩μ€νμλ ν΄λΉνλ WidgetFactoryμ μλΈν΄λμ€κ° μλ€. κ°κ°μ μλΈν΄λμ€λ ν΄λΉ 룩μ€νμ κ³ μ ν widgetμ μμ±ν μ μλ κΈ°λ₯μ΄ μλ€. μλ₯Ό λ€λ©΄, MotifWidgetFactoryμ CreateScrollBarλ Motif μ€ν¬λ‘€λ° μΈμ€ν΄μ€λ₯Ό μμ±νκ³ λ°ννλ€, μ΄ μνμ΄ μΌμ΄λ λμ PMWidgetFactory μμμ Presentation Manager λ₯Ό μν μ€ν¬λ‘€λ°λ₯Ό λ°ννλ€. ν΄λΌμ΄μΈνΈλ WidgetFactory μΈν°νμ΄μ€λ₯Ό ν΅ν΄ κ°κ°μ 룩μ€νμ ν΄λΉνλ ν΄λμ€μ λν μ 보 μμ΄ νΌμμ widgetλ€μ μμ±νκ² λλ€. λ¬λ¦¬ λ§νμλ©΄, ν΄λΌμ΄μΈνΈλ κ°κ°μ ꡬ체μ μΈ ν΄λμ€κ° μλ μΆμν΄λμ€μ μν΄ μ μλ μΈν°νμ΄μ€μ μΌμνκΈ°λ§ νλ©΄ λλ€λ λ»μ΄λ€.
1.4. Applicability ¶
μ΄λ΄ λ Abstract Factory ν¨ν΄μ μ¬μ©ν΄λΌ
- μμ€ν
μ΄ λΆμ°λ¬Όμ λ§λ€κ³ , μμ±νκ³ , κ·Έλ¦¬κ³ λ³΄μ¬μ§λ κ²κ³Ό λ
립μ μ΄μ΄μΌ ν λ.
- μμ€ν
μ΄ λ€μν λΆμ°λ¬Όμ μ§ν©μ κ³ λ €ν΄μΌ ν λ.
- μ΄λ€ μ°κ΄λ μ§ν©μ κ°μ²΄λ€μ΄ μλ‘ κ°μ΄ μ¬μ©λ μ μλλ‘ λμμΈλμ΄μ§κ² κ°μ ν΄μΌ ν λ.
- ν΄λμ€ λΌμ΄λΈλ¬λ¦¬λ₯Ό λλκ³ μΆκ³ , μΈν°νμ΄μ€λ§μ λλ¬λ΄λ, ν΄λμ€μ λμμ 보μ΄μ§ μκ³ μ ν λ.
1.6. Participants ¶
- AbstractFactory(WidgetFactory)
- μΆμ κ°μ²΄(ProductObject)λ€μ λ§λλ κΈ°λ₯μ μν μΈν°νμ΄μ€λ₯Ό μ μνλ€.
- μΆμ κ°μ²΄(ProductObject)λ€μ λ§λλ κΈ°λ₯μ μν μΈν°νμ΄μ€λ₯Ό μ μνλ€.
- ConcreteFactory(MotifWidgetFactory, PMWidgetFactory)
- κ°μ²΄(ProductObject)λ₯Ό λ§λλ κΈ°λ₯μ μννλ€.
- κ°μ²΄(ProductObject)λ₯Ό λ§λλ κΈ°λ₯μ μννλ€.
- AbstractProduct(Window, ScrollBar)
- μ΄λ€ κ°μ²΄(ProductObject)λ₯Ό μν μΈν°νμ΄μ€λ₯Ό μ μνλ€.
- μ΄λ€ κ°μ²΄(ProductObject)λ₯Ό μν μΈν°νμ΄μ€λ₯Ό μ μνλ€.
- ConcreteProduct(MotifWindow, MotifScrollBar)
- Client
- AbstractFactoryμ μν΄μ μ μλ μΈν°νμ΄μ€μ AbstractProduct ν΄λμ€λ§μ μ¬μ©νλ€.
- AbstractFactoryμ μν΄μ μ μλ μΈν°νμ΄μ€μ AbstractProduct ν΄λμ€λ§μ μ¬μ©νλ€.
1.7. Collaborations ¶
- 보ν΅μ κ²½μ° ConcreteFactory ν΄λμ€μ λ¨μΌ μΈμ€ν΄μ€λ μνμκ°(run-time)μ€μ μμ±λλ€.
μ΄ concrete factoryλ νΉμ μμμ μν κ°μ²΄(ProductObject)λ₯Ό λ§λ€μ΄λΈλ€. μλ‘ λ€λ₯Έ κ°μ²΄(ProductObject)λ₯Ό λ§λ€μ΄ λ΄κΈ° μν΄μλ
ν΄λΌμ΄μΈνΈλ μλ‘ λ€λ₯Έ concrete factoryλ₯Ό μ¬μ©ν΄μΌ νλ€.
- AbstractFactoryλ κ°μ²΄(ProductObject)μ μμ±μ ConcreteFactoryμ μλΈ ν΄λμ€μ μμνλ€.
1.8. Consequences ¶
Abstract Factory ν¨ν΄μ λ€μκ³Ό κ°μ μ₯μ κ³Ό λ¨μ μ΄ μλ€.
- λ
립μ μΈ concrete ν΄λμ€λ€. Abstract Factory ν¨ν΄μ μ΄ν리μΌμ΄μ
μ΄ μμ±ν μ€λΈμ νΈμ ν΄λμ€λ₯Ό μ‘°μ ν μ μλλ‘ ν΄μ€λ€.
factoryκ° κ°μ²΄λ₯Ό λ§λ€μ΄ λ΄λλ° λν μνκ³Ό μ± μμ μΊ‘μν νκΈ° λλ¬Έμ μμν ν΄λμ€λ‘λΆν° ν΄λΌμ΄μΈνΈκ° λ 립μ μΌ μ μλ€.
ν΄λΌμ΄μΈνΈλ μΆμ μΈν°νμ΄μ€λ₯Ό ν΅ν΄μ μΈμ€ν΄μ€λ₯Ό λ€λ£¬λ€. concrete facotyμ μνμμ μ°λ¬Όμ ν΄λμ€ μ΄λ¦μ μ°¨λ¨λμ΄μλ€.
μ¦ ν΄λΌμ΄μΈνΈ μ½λμ concrete factoryκ° λνλμ§ μλλ€.
- μ°λ¬Όμ μ§ν©κ°μ μ νμ μ½κ² ν΄μ€λ€. concrete factoryμ ν΄λμ€λ μ΄ν리μΌμ΄μ
μ λ¨ νλ², μ μΈλ λλ§ μ°μΈλ€.
μ΄λ conncrete factoryλ₯Ό μ½κ² μ νν΄μ μ¬μ©ν μ μλλ‘ ν΄μ£Όκ³ . μ΄λ‘μ¨ κ°λ¨νκ² concrete factoryλ§ λ°κΏμ€μΌλ‘μ μλ‘λ€λ₯Έ μ°λ¬Όμ 쑰건μ μ½κ² μΈμ μλ€.
abstract factoryλ μλ²½ν μ°λ¬Όμ μ§ν©μ μμ±ν΄ λ΄κ²λμ΄, λͺ¨λ μ°λ¬Όμ μ§ν©μ΄ νλ²μ λ°λ μ μκ² νλ€(κ°μννμ λ€λ₯Έ λͺ¨μ΅λ€μ΄λ―λ‘.. μμ μ£Ό).
UI μμ μμ Motif widgetsμ Presentation Manager widgetsλ‘ λ°κΎΈλ μμ μ λ¨μ§ μ μ¬ν ν©ν 리μ κ°μ²΄μ λ°κΏμ£Όκ³ κ·Έ μΈν°νμ΄μ€λ₯Ό λ€μ μμ±ν¨μΌλ‘μ¨ νν μ μλ€.
- μ°λ¬Όκ°μ μΌκ΄μ±μ μ΄μ§νλ€. μ΄λ€ μ§ν©λ΄μ κ°μ²΄λ€μ΄ μλ‘ νλ ₯νλλ‘ κ³ μλμλ€λ©΄, μ΄λ€ μ΄ν리μΌμ΄μ
μ νλ²μ λ¨ νλμ μ§ν©μμ κ°μ²΄λ₯Ό μ¬μ©νλ κ²μ΄ μ€μνλ€.
AbstractFactoryλ μ΄κ²μ μ½κ² νλ€.
- μλ‘μ΄ μ°λ¬Όμ μ§μνλ κ²μ΄ μ΄λ ΅λ€. abstract factoryλ€μ νμ₯ν΄μ μλ‘μ΄ μ°λ¬Όμ μμ±νλ κ²μ μ½μ§ μλ€.
μλνλ©΄ AbstractFactory μΈν°νμ΄μ€λ μμ°λμ΄μ§ μ°λ¬Όμ μ§ν©μ κ³ μ ν΄λκΈ° λλ¬Έμ΄λ€. μλ‘μ΄ μ°λ¬Όμ μ§μνλ λ°λ factoryμ μΈν°νμ΄μ€λ₯Ό νμ₯ν νμκ° μλ€
(AbstractFactory ν΄λμ€μ λͺ¨λ μλΈ ν΄λμ€λ€μ λ°κΎΈλκ²μ ν¬ν¨ν΄μ). Implementation λΆλΆμμ μ΄κ²μ λν νκ°μ§ ν΄κ²°μ μ λν΄ λ Όμ ν κ²μ΄λ€.
1.11. Known Uses ¶
InterViews λ AbstractFactory ν΄λμ€λ€μ λνλ΄κΈ° μν΄μ 'Kit'λ₯Ό μ λ―Έμ¬λ‘ μ¬μ©νλ€. μ΄κ²μ WidgetKitκ³Ό DialogKit abstract factory λ€μ λͺ
νν 룩μ€ν UI κ°μ²΄λ₯Ό μν΄μ μ μνλ€. InterViewsλ λν μλ‘ λ€λ₯Έ λ³΅ν© κ°μ²΄λ₯Ό μμ±νλ LayoutKit μ ν¬ν¨λ€. μλ₯Ό λ€λ©΄, μ΄λ€ layoutμ λ¬Έμμ λ°©ν₯(μΈλ¬Όμ΄λ νκ²½)μ λ°λ₯Έ μλ‘ λ€λ₯Έ λ³΅ν© κ°μ²΄λ₯Ό κ°λ
μ μΌλ‘ μ λ ¬νλ€.
ET++WGM88μ λ€λ₯Έ μλμ° μμ€ν (μλ₯Ό λ€λ©΄, X Windows μ SunViews)κ°μ νΈνμ μννκΈ° μν΄μ Abstract Factory ν¨ν΄μ μ¬μ©νλ€. μλμ° μμ€ν μ μΆμ base ν΄λμ€λ μλμ°μμ€ν μ μμ κ°μ²΄(μλ₯Ό λ€λ©΄, MakeWindow, MakeFont, MakeColor)λ₯Ό μμ±ν μ μλ μΈν°νμ΄μ€λ₯Ό μ μνλ€. Concrete μλΈ ν΄λμ€λ νΉμ μλμ° μμ€ν μ μΈν°νμ΄μ€λ₯Ό μννλ€.
ET++WGM88μ λ€λ₯Έ μλμ° μμ€ν (μλ₯Ό λ€λ©΄, X Windows μ SunViews)κ°μ νΈνμ μννκΈ° μν΄μ Abstract Factory ν¨ν΄μ μ¬μ©νλ€. μλμ° μμ€ν μ μΆμ base ν΄λμ€λ μλμ°μμ€ν μ μμ κ°μ²΄(μλ₯Ό λ€λ©΄, MakeWindow, MakeFont, MakeColor)λ₯Ό μμ±ν μ μλ μΈν°νμ΄μ€λ₯Ό μ μνλ€. Concrete μλΈ ν΄λμ€λ νΉμ μλμ° μμ€ν μ μΈν°νμ΄μ€λ₯Ό μννλ€.