E D R , A S I H C RSS

DPSC Chapter3

Abstract Factory(31)


ABSTRACT FACTORY(DP 87)


Intent

����� �� ������ 객���� ���� ����기 ������������ ��공��. ����������� �������� � 구
�� �고 �������� �� ���� ���(���� ������ ������)���� ��(����)�� ������고 ��.

Discussion

�� ������ �� 간����. ���� �� ������ ����. Abstract Factory �� ������ �� ���� ������ ����
��.

���� ������, ������ �������� �� ������ �� ��계���� ��(����)�� ���� ��� ���� ���� ����그���� ������.
그� , ����, ������, 그��고 ��객 ������ ���� ������ ������ ���. ������, ���� ����그�� ����
������ ����. �� Ford ������ Ford ����과 �������� �����. Ford Family�� ������. ����, ������
���� part�� family���� �����.
Ford parts,Toyota parts,Porsche parts ������. ���������� ���� 구���� ���� ������. 각각 ������
���� �����. ��� CarEngine �� 구���� ������, CarBody���� body ������ �����.
(결국, 각각 CarEngine�� Base Class�� �� ���� �� Ford Engine,Toyota Engine�������� ���� �� ������ ����.)
������, ������ ���� ���� ������ �� �고, ���� ���(Family)������ 각각�� ���� ������ ��게 �� ��
���� �� ����. (Toyota ���������� Ford ����� ���� ����.)
��고 �� faimily���� � ������ ������ ������(����,������..) �� ��� ������.
������ Abstract Factory Pattern�� ���� ��� ���� �� �� ����.
(�� : Abstract Factory Pattern Factory Pattern�� ������ ���.Factory Pattern�� �� Base Class���� ��
�� ���� ������ ������ �� ���� ���� ������ ���� ��� ������.
Abstract Factory Pattern�� ���� 개�� Factory�� ���� ���� ������ ���� ��� ������. )
������ �� ���� ���� ������ ������ �����.


Vechile과 CarPart�� Object ������ ���� ������. ����, ���� 구���� �� ��계���� �������� ��������.
���� ������(Ford) ����, , ����, �� ���� ����(����� �� �� ���� ����)�� ���� ���� �����.
���� ����� ��기�� ������ � �� ���� ��계�� �� �� ���� ����� ���. ��, ������ �� ������
�����기���� �������� ���� ��공�고 ����.

������ CarPartFactory���� �������� ���� ���� �� ������ ������. "구���� ��������
���� �� ������ 객 ���� ����기 ������������ ��공��" (Intent ������ ��급��)
������. 그� ������ �� �� ����(makeCar,makeEngine,makeBody)�� ����. 그 ������ �� ����
���� 구���� ������ �� ������ ����. 각각�� �� ������ �������� ����고 ���기 ���� �� ��
���� �� ����. 그���� ������ Object�� ���� �� 구���� �����.



���� ��(part) �� �������� 구���기 ����, ������ �������� ������ ������.

      CarPartFactory>>makeCar
          self subclassResponsibility

      CarPartFactory>>makeEngine
          self subclassResponsibility

      CarPartFactory>>makeBody
          self subclassResponsibility
��고 �������� ���������� 구���� �� ������ �����.

      
      FordFactory>>makeCar
          ^FordCar new

      FordFactory>>makeEngine
          ^FordEngine new

      FordFactory>>makeBody
          ^FordBody new

      ToyotaFactory>>makeCar
          ^ToyotaCar new

      ToyotaFactory>>makeEngine
          ^ToyotaEngine new

      ToyotaFactory>>makeBody
          ^ToyotaBody new
��������, ������ �������� �� ����.


Abstract Factory��, ������(part) 결������ � �������� ������� �� ����. �������� ������(part) ���� ���� (family)�� �� �������� ��� ����. ��, �������� �� ����(part) ���� ���� ����. ���� �� ������� ���� ����. 그� �������� ����. (������ Abstract Factory Builder �� ���� ���������� ������ �� ���.)

CarAssembler ������ ��������고 ����. 그��고 CarPartFactory�� ������ ��������고 ���� ������ ���� 갖��.

    
         CarAssembler>>assembleCar
             | car |
             "Create the top-level part, the car object which starts out having no subcomponents, and add an engine, body, etc."
             
             car := factory makeCar
             car 
                 addEngine: factory makeEngine;
                 addBody: factory makeBody;
                 ...
             ^car
���, ������� FordFactory�� ��������, ������ �����기 �� �� ���� FordEngine�� ���. ��������� ToyotaFactory��, ToyotaEngine �������� makeEngine�� ���� ���� �� �고, 그 ������ ����� ���.

��, �� �� �� ����. CarAssembler��(factory ������) 게 구���� CarPartFactory �� ������ �������� �� �� ����까? 그� ������ ���� ���� �������� ���� 기�� �������� ���� ���. �� �� ���� ������ �������� �������� ���� ���.
��, �� 경���� ������ ���기 ������ 그��� ������ �� �� ������ ���. ��, �� CarPartFactory ������ ������ ����������(����)�� 구���기 ����, ������ �������� ������ �� ���� �� �고 ������ �� ����. 그� �� ������ ���������� �� ��공���� �������� ������ ������.

������ �� ����, �������� ���� 구���� ���� ����. ABSTRACT FACTORY PATTERN�� ���� �� 경��, ���� �� ������ ����과 � �� ���.(�� ���������� ����)

         CarAssembler>>assembleCar
            "Without Abstract Factory."
            | car |
            car := (consumerChoice == #Ford
                       ifTrue:  [FordCar new]
                       ifFalse:  [consumerChoice == #Toyota
                           ifTrue:  [ToyotaCar new]
                           ifFalse:  [consumerChoice == #Porsche
                                  ifTrue:  [PorscheCar new]
                                  ifFalse:  [...])
            car addEngine:
                   (consumerChoice == #Ford
                       ifTrue:  [FordEngine new]
                       ifFalse:  [...]).
           
            ...
            ^car
������, CarAssmebler�� ����기 ������ ����� ��고 그 �� ���� ���� �고, 그��� ���� ���� ������� ���� ������ 결��. ABSTRACT FACTORY ����� CarAssembler ���� �� ������ ��������. 그��고 �������� ������. �������� �������� CarAssembler ���� ����, CarAssembler�� 간���게 구���� ���� �� ���� ����기 ���������� ������.

ABSTRACT FACTORY ��근 �� ����고, �� ��게 �� ����������� �� ����. �������� �� ���� ������ ����기 ����, ������ CarPartFactory�� ���� ������
����고 그��� �������기 ������� ������.

��기�� ��과���� �� 개�� �� ����. ������, �� CarPartFactory�� ���� ���������� 구����. ��������� ������ ���� CarPartFactory��
�� ���� ��경�� �고 � �� ������ �� ��� ������� ������.
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:04
Processing time 0.0537 sec