// 공통성 -> 가변성
// 메소드 / 클래스
//Static factory
//생성자 오버로딩 한계
//좋은 이름
//객체의 생성 제한
//내부객체 리턴 (서브타입)
//idiom 관련 접근
//Abstract factory (추상팩토리) design pattern.
//추상적인 부품을 조합하여 추상적인 제품을 만드는 설계
//설계적 관점 접근
//생성자를 대체하기 위해 만든 Idiom
//객체의 생성 제한
//내부객체를 리턴 가능(서브타입)
//Factory method
// 객체 생성단계만 제외하고 나머지가 유사하다면,
// 그 메소드는 부모로 옮기고 객체생성은 자식이 맡도록 한다.
// 생성에 관여한 관점
- abstract class BaseDialog implements IFactory {
- void init() {
- IButton button = createButton();
- IEditBox editBox = createEditBox();
- button.draw();
- editBox.draw();
- }
- public abstract IButton createButton();
- public abstract IEditBox createEditBox();
- }
- class GTKDialog extends BaseDialog {
- @Override
- public IButton createButton() {
- return new GTKButton();
- }
- @Override
- public IEditBox createEditBox() {
- return new GTKEditBox();
- }
- }
- class XPDialog extends BaseDialog {
- @Override
- public IButton createButton() {
- return new XPButton();
- }
- @Override
- public IEditBox createEditBox() {
- return new XPEditBox();
- }
- }
- interface IFactory {
- IButton createButton();
- IEditBox createEditBox();
- }
- class XPFactory implements IFactory {
- @Override
- public IButton createButton() {
- return new XPButton();
- }
- @Override
- public IEditBox createEditBox() {
- return new XPEditBox();
- }
- }
- class GTKFactory implements IFactory {
- @Override
- public IButton createButton() {
- return new GTKButton();
- }
- @Override
- public IEditBox createEditBox() {
- return new GTKEditBox();
- }
- }
- interface IButton {
- public void draw();
- }
- interface IEditBox {
- public void draw();
- }
- class XPEditBox implements IEditBox {
- @Override
- public void draw() {
- System.out.println("draw XP editbox");
- }
- }
- class GTKEditBox implements IEditBox {
- @Override
- public void draw() {
- System.out.println("draw GTK editbox");
- }
- }
- class XPButton implements IButton {
- @Override
- public void draw() {
- System.out.println("draw XP button");
- }
- }
- class GTKButton implements IButton {
- @Override
- public void draw() {
- System.out.println("draw GTK button");
- }
- }
'java > design_pattern' 카테고리의 다른 글
MediatorPattern - 중재자 패턴 (0) | 2014.07.01 |
---|---|
ObserverPattern - 관찰자 패턴 (0) | 2014.07.01 |
Flyweight Pattern (0) | 2014.06.27 |
Prototype Pattern (0) | 2014.06.27 |
State Pattern (0) | 2014.06.27 |