달력

4

« 2024/4 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

   간단히 말하자면!!

   => 주어지는 값에 따라 다른 객체를 생성하게 하는 패턴

   이라고 말 할 수 있겠다.

   예를 들어 자판기가 있다고 하자. 이 자판기에는 금액에 따라 뽑을 수 있는 음료수가 다르다.

   100원을 넣으면 다방커피를, 200원을 넣으면 캔커피를, 300원을 넣으면 원두커피를 뽑을 수 있다.

   이 자판기에 어떤 금액을 넣느냐에 따라서 뽑아지는 커피가 다른 것이다.

   즉, 팩토리 패턴으로 설명을 하자면 커피라는 abstrac class 또는 interface가 있고 자판기라는 class가 있다.

   자판기라는 class에는 동전을 넣는 method(insertCoin())가 있고, 커피를 뽑는 method(popCoffee())가 있을 것이다.

   커피를 뽑는 method는 동전을 넣는 method에서 입력받은 동전을 계산하여 동전에 해당하는 커피를 뽑아주는 메소드이다.

   insertCoin() method를 통해서 동전을 넣으면 popCoffee() method를 통해서 금액에 해당하는 Coffee 객체를 생성하게 되는 것이다.

 

사용자 삽입 이미지

Factory Pattern


[소스코드]

  /**
   *
   * @(#) Coffee.java
   * created date : 2007. 05. 30
   *
   */
  package ybchoi.pattern.creational.factory;
 
  /**
   *
   * @author Youbok, Choi
   * @version 1.0
   *
   */
  public interface Coffee {
 
   public String getName();
  }
 
  /**
   *
   * @(#) Coffee.java
   * created date : 2007. 05. 30
   *
   */
  package ybchoi.pattern.creational.factory;
 
  /**
   *
   * @author Youbok, Choi
   * @version 1.0
   *
   */
  public class CanCoffee implements Coffee {
   String coffee_name = null;
 
   public CanCoffee(String name) {
    coffee_name = name;
   }
 
   public String getName() {
    return coffee_name;
   }
 
   public String toString() {
    return "Can Coffee : " + coffee_name;
   }
  }
 
  /**
   *
   * @(#) Coffee.java
   * created date : 2007. 05. 30
   *
   */
  package ybchoi.pattern.creational.factory;
 
  /**
   *
   * @author Youbok, Choi
   * @version 1.0
   *
   */
  public class DabangCoffee implements Coffee {
   String coffee_name = null;
 
   public DabangCoffee(String name) {
    coffee_name = name;
   }
 
   public String getName() {
    return coffee_name;
   }
 
   public String toString() {
    return "Dabang Coffee : " + coffee_name;
   }
  }
 
  /**
   *
   * @(#) Coffee.java
   * created date : 2007. 05. 30
   *
   */
  package ybchoi.pattern.creational.factory;
 
  /**
   *
   * @author Youbok, Choi
   * @version 1.0
   *
   */
  public class WondooCoffee implements Coffee {
   String coffee_name = null;
 
   public WondooCoffee(String name) {
    coffee_name = name;
   }
 
   public String getName() {
    return coffee_name;
   }
 
   public String toString() {
    return "Wondoo Coffee : " + coffee_name;
   }
  }
 
  /**
   *
   * @(#) Coffee.java
   * created date : 2007. 05. 30
   *
   */
  package ybchoi.pattern.creational.factory;
 
  /**
   *
   * @author Youbok, Choi
   * @version 1.0
   *
   */
  public class Machine {
   private int coin = 0;
 
   public void insertCoin(int coin) {
    this.coin = coin;
   }
 
   public void resetCoin() {
    this.coin = 0;
   }
 
   public Coffee popCoffee() {
    if( coin == 100 ) {
     return (new DabangCoffee("보람다방"));
    } else if( coin == 200 ) {
     return (new CanCoffee("레츠비"));
    } else if( coin == 300 ) {
     return (new WondooCoffee("블루마운틴"));
    } else {
     return null;
    }
   }
  }
 
  /**
   *
   * @(#) Coffee.java
   * created date : 2007. 05. 30
   *
   */
  package ybchoi.pattern.creational.factory;
 
  /**
   *
   * @author Youbok, Choi
   * @version 1.0
   *
   */
  public class MainClass {
      public static void main(String[] args) {
      Machine m = new Machine();
      m.insertCoin(100);
      System.out.println("# your coffee is : " + m.popCoffee());
      m.resetCoin();
      m.insertCoin(200);
      System.out.println("# your coffee is : " + m.popCoffee());
      m.resetCoin();
      m.insertCoin(300);
      System.out.println("# your coffee is : " + m.popCoffee());
    }
  }

[실행결과]
   # your coffee is : Dabang Coffee : 보람다방
   # your coffee is : Can Coffee : 레츠비
   # your coffee is : Wondoo Coffee : 블루마운틴

'그거 > Java' 카테고리의 다른 글

java Collection 들  (0) 2007.08.10
객체의 hashcode에 대한 고찰  (0) 2007.08.09
MVC 기반 게시판 만들기  (2) 2007.04.27
Collection Framework  (0) 2007.04.23
try catch finally 사용시 주의해야 할 점!  (1) 2007.04.23
:
Posted by 뽀기