// 공통성 -> 가변성

// 메소드 / 클래스

//Static factory

//생성자 오버로딩 한계

//좋은 이름

//객체의 생성 제한

//내부객체 리턴 (서브타입)

//idiom 관련 접근


//Abstract factory (추상팩토리) design pattern.

//추상적인 부품을 조합하여 추상적인 제품을 만드는 설계

//설계적 관점 접근

//생성자를 대체하기 위해 만든 Idiom

//객체의 생성 제한

//내부객체를 리턴 가능(서브타입)


//Factory method

// 객체 생성단계만 제외하고 나머지가 유사하다면, 

// 그 메소드는 부모로 옮기고 객체생성은 자식이 맡도록 한다.

// 생성에 관여한 관점


  1. abstract class BaseDialog implements IFactory {
  2.         void init() {
  3.                 IButton button = createButton();
  4.                 IEditBox editBox = createEditBox();
  5.                
  6.                 button.draw();
  7.                 editBox.draw();
  8.         }
  9.         public abstract IButton createButton();
  10.        
  11.         public abstract IEditBox createEditBox();
  12. }
  13. class GTKDialog extends BaseDialog {
  14.         @Override
  15.         public IButton createButton() {
  16.                 return new GTKButton();
  17.         }
  18.        
  19.         @Override
  20.         public IEditBox createEditBox() {
  21.                 return new GTKEditBox();
  22.         }
  23. }
  24. class XPDialog extends BaseDialog {
  25.         @Override
  26.         public IButton createButton() {
  27.                 return new XPButton();
  28.         }
  29.  
  30.         @Override
  31.         public IEditBox createEditBox() {
  32.                 return new XPEditBox();
  33.         }
  34. }
  35. interface IFactory {
  36.         IButton createButton();
  37.  
  38.         IEditBox createEditBox();
  39. }
  40.  
  41. class XPFactory implements IFactory {
  42.  
  43.         @Override
  44.         public IButton createButton() {
  45.                 return new XPButton();
  46.         }
  47.  
  48.         @Override
  49.         public IEditBox createEditBox() {
  50.                 return new XPEditBox();
  51.         }
  52.  
  53. }
  54.  
  55. class GTKFactory implements IFactory {
  56.  
  57.         @Override
  58.         public IButton createButton() {
  59.                 return new GTKButton();
  60.         }
  61.  
  62.         @Override
  63.         public IEditBox createEditBox() {
  64.                 return new GTKEditBox();
  65.         }
  66.  
  67. }
  68.  
  69. interface IButton {
  70.         public void draw();
  71. }
  72.  
  73. interface IEditBox {
  74.         public void draw();
  75. }
  76. class XPEditBox implements IEditBox {
  77.  
  78.         @Override
  79.         public void draw() {
  80.                 System.out.println("draw XP editbox");
  81.         }
  82.  
  83. }
  84.  
  85. class GTKEditBox implements IEditBox {
  86.  
  87.         @Override
  88.         public void draw() {
  89.                 System.out.println("draw GTK editbox");
  90.         }
  91.  
  92. }
  93.  
  94. class XPButton implements IButton {
  95.         @Override
  96.         public void draw() {
  97.                 System.out.println("draw XP button");
  98.         }
  99. }
  100.  
  101. class GTKButton implements IButton {
  102.         @Override
  103.         public void draw() {
  104.                 System.out.println("draw GTK button");
  105.         }
  106. }


'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

+ Recent posts