"추상 팩토리 패턴"의 두 판 사이의 차이

 
(사용자 2명의 중간 판 13개는 보이지 않습니다)
2번째 줄: 2번째 줄:
;abstract factory pattern
;abstract factory pattern
;추상 팩토리 패턴
;추상 팩토리 패턴
*객체를 통해 제품을 생산
* [[생성 패턴]]의 하나
*부품을 조립해서 제품을 만드는 구조
* 객체를 통해 제품을 생산
*Client의 인스턴스가 ConcreteFactory의 인스턴스에 객체 생성을 맡김
* 부품을 조립해서 제품을 만드는 구조
*객체 구성(composition)
* 팩토리 객체에 객체 생성을 [[위임 (OOP)|위임]]한다.
* Client의 인스턴스는 추상 팩토리를 이용하며 추상 팩토리는 구상 팩토리(ConcreteFactory)에 객체 생성을 맡긴다.
* Client는 추상 팩토리를 통해 추상 Product 타입의 객체를 얻는다.
* [[객체 컴포지션]]을 활용한다.


http://upload.wikimedia.org/wikipedia/commons/thumb/6/67/Abstract_Factory_UML_class_diagram.svg/800px-Abstract_Factory_UML_class_diagram.svg.png
http://upload.wikimedia.org/wikipedia/commons/thumb/6/67/Abstract_Factory_UML_class_diagram.svg/800px-Abstract_Factory_UML_class_diagram.svg.png


==예제 (java)==
==예제 (java)==
<source lang='java'>
<syntaxhighlight lang='java' run>
/* GUIFactory example -- */
/* GUIFactory example -- */
public class ApplicationRunner {
    public static void main(String[] args) {
        new Application(createOsSpecificFactory());
    }
    public static GUIFactory createOsSpecificFactory() {
        if (System.getProperty("os.name").startsWith("Windows")) return new WinFactory();
        return new OSXFactory();
    }
}
   
   
interface Button {
interface Button {
51번째 줄: 65번째 줄:
     }
     }
}
}
   
  </syntaxhighlight>
public class ApplicationRunner {
    public static void main(String[] args) {
        new Application(createOsSpecificFactory());
    }
    public static GUIFactory createOsSpecificFactory() {
        int sys = readFromConfigFile("OS_TYPE");
        if (sys == 0) return new WinFactory();
        else return new OSXFactory();
    }
}
</source>


==같이 보기==
==같이 보기==
72번째 줄: 74번째 줄:
*[[디자인 패턴]]
*[[디자인 패턴]]


==참고 자료==
==참고==
*http://en.wikipedia.org/wiki/Abstract_factory_pattern
*http://en.wikipedia.org/wiki/Abstract_factory_pattern


[[분류: 디자인 패턴]]
[[분류: 디자인 패턴]]

2022년 4월 25일 (월) 01:27 기준 최신판

1 개요[ | ]

abstract factory pattern
추상 팩토리 패턴
  • 생성 패턴의 하나
  • 객체를 통해 제품을 생산
  • 부품을 조립해서 제품을 만드는 구조
  • 팩토리 객체에 객체 생성을 위임한다.
  • Client의 인스턴스는 추상 팩토리를 이용하며 추상 팩토리는 구상 팩토리(ConcreteFactory)에 객체 생성을 맡긴다.
  • Client는 추상 팩토리를 통해 추상 Product 타입의 객체를 얻는다.
  • 객체 컴포지션을 활용한다.

 

2 예제 (java)[ | ]

/* GUIFactory example -- */

public class ApplicationRunner {
    public static void main(String[] args) {
        new Application(createOsSpecificFactory());
    }
 
    public static GUIFactory createOsSpecificFactory() {
        if (System.getProperty("os.name").startsWith("Windows")) return new WinFactory();
        return new OSXFactory();
    }
}
 
interface Button {
    void paint();
}
 
interface GUIFactory {
    Button createButton();
}
 
class WinFactory implements GUIFactory {
    public Button createButton() {
        return new WinButton();
    }
}
 
class OSXFactory implements GUIFactory {
    public Button createButton() {
        return new OSXButton();
    }
}
 
class WinButton implements Button {
    public void paint() {
        System.out.println("I'm a WinButton");
    }
}
 
class OSXButton implements Button {
    public void paint() {
        System.out.println("I'm an OSXButton");
    }
}
 
class Application {
    public Application(GUIFactory factory) {
        Button button = factory.createButton();
        button.paint();
    }
}

3 같이 보기[ | ]

4 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}