Writing /volume1/Web/Public/dokuwiki/data/log/deprecated/2024-11-15.log failed

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
study:java:design_pattern:state [2008/09/20 06:00] bananastudy:java:design_pattern:state [2010/10/16 02:09] (現在) banana
行 39: 行 39:
  
 스테이트 패턴은 컨텍스트 객체에 수많은 조건문을 집어넣는 대신에 사용할 수 있는 패턴이라고 생각하면 됩니다. 스테이트 패턴은 컨텍스트 객체에 수많은 조건문을 집어넣는 대신에 사용할 수 있는 패턴이라고 생각하면 됩니다.
-행동을 상태 객체 내에 캡슐화시키면 컨텍스트 내의 상태 객체를 바꾸는 것만으로도 컨텍스트 객에츼 행동을+행동을 상태 객체 내에 캡슐화시키면 컨텍스트 내의 상태 객체를 바꾸는 것만으로도 컨텍스트 객체의 행동을
 바꿀 수 있으니까요. 바꿀 수 있으니까요.
  
行 126: 行 126:
 } }
 </code> </code>
 +
 ===== NoQuarterState Calss ===== ===== NoQuarterState Calss =====
-상태를 구현해 볼 때가 되었습니다. 우선 NoQuarterState부터 시작해 봅시다.+상태를 구현해 볼 때가 되었습니다. 우선 **%%NoQuarterState%%**부터 시작해 봅시다.
 <code java> <code java>
 public class NoQuarterState implements State { public class NoQuarterState implements State {
行 154: 行 155:
 } }
 </code> </code>
 +
 +
 +
 ===== HasQuarterState Class ===== ===== HasQuarterState Class =====
-이제 %%GumballMachine%% 클래스하고 상태 클래스가 어떤 식으로 맞물려 돌아가는지 어느 정도 +이제 **%%GumballMachine%%** 클래스하고 상태 클래스가 어떤 식으로 맞물려 돌아가는지 어느 정도 
-감히 잡힐 것 같군요. 그럼 %%HasQuarterState%%와 %%SoldSate%% 클래스도 구현해 볼까요?+감히 잡힐 것 같군요. 그럼 **%%HasQuarterState%%**와 **%%SoldSate%%** 클래스도 구현해 볼까요?
 <code java> <code java>
 public class HasQuarterState implements State { public class HasQuarterState implements State {
 +     Random randomWinner = new Random(System.currentTimeMillis());
      GumballMachine gumballMachine;      GumballMachine gumballMachine;
  
行 176: 行 181:
      public void turnCrank() {      public void turnCrank() {
         System.out.println("손잡이를 돌리셨습니다.");         System.out.println("손잡이를 돌리셨습니다.");
-        gumballMachine.setState(gumballMachine.getSoldState());+        int winner = randomWinner.nextInt(10); 
 +        if((winner==0) && (gumballMachine.getCount() > 1)) { 
 +           gumballMachine.setState(gumballMachine.getWinnerState()); 
 +        } else { 
 +           gumballMachine.setState(gumballMachine.getSoldState()); 
 +        }
      }      }
  
行 184: 行 194:
 } }
 </code> </code>
 +
 +
 +
 ===== SoldState Class ===== ===== SoldState Class =====
-%%SolidState%% 클래스도 살펴봅시다.+**%%SolidState%%** 클래스도 살펴봅시다. 
 +<code java> 
 +public class SolidState implements State { 
 +     GumballMachine gumballMachine; 
 + 
 +     public SolidState(GumballMachine gumballMachine) { 
 +         this.gumballMachine = gumballMachine; 
 +     } 
 + 
 +     public void insertQuarter() { 
 +         System.out.println("잠시만 기다려 주세요. 알맹이가 나가고 있습니다."); 
 +     } 
 + 
 +     public void ejectQuarter() { 
 +         System.out.println("이미 알맹이를 뽑으셨습니다."); 
 +     } 
 + 
 +     public void turnCrank() { 
 +         System.out.println("손잡이는 한 번만 돌려주세요."); 
 +     } 
 + 
 +     public void dispense() { 
 +         gumballMachine.releaseBall(); 
 +         if (gumballMachine.getCount() > 0) { 
 +             gumballMachine.setState(gumballMachine.getNoQuarterState()); 
 +         } else { 
 +             System.out.println("Oopse, out of gumballs!."); 
 +             gumballMachine.setState(gumballMachine.getSoldState()); 
 +         } 
 +     } 
 +
 +</code> 
 +===== SoldOutState Class ===== 
 +<code java> 
 +public class SoldOutState implements State { 
 +    GumballMachine gumballMachine; 
 + 
 +    public SoldOutState(GumballMachine gumballMachine) { 
 +         this.gumballMachine = gumballMachine; 
 +    } 
 + 
 +    public void insertQuarter() { 
 +         System.out.println("죄송합니다. 매진되었습니다."); 
 +    } 
 + 
 +    public void ejectQuarter() { 
 +         System.out.println("죄송합니다. 매진되었습니다."); 
 +    } 
 + 
 +    public void turnCrank() { 
 +         System.out.println("죄송합니다. 매진되었습니다."); 
 +    } 
 + 
 +    public void dispense() { 
 +         System.out.println("죄송합니다. 매진되었습니다."); 
 +    } 
 +
 +</code> 
 +===== WinnerState Class ===== 
 +<code java> 
 +public class WinnerState implements State { 
 +     GumballState gumballState; 
 + 
 +     public WinnerState(GumballState gumballState) { 
 +         this.gumballState = gumballState; 
 +     } 
 +  
 +     public void insertQuarter() { 
 +         System.out.println("이미 알맹이를 뽑으셨습니다."); 
 +     } 
 + 
 +     public void ejectQuarter() { 
 +         System.out.println("이미 알맹이를 뽑으셨습니다."); 
 +     } 
 + 
 +     public void turnCrank() { 
 +         System.out.println("이미 알맹이를 뽑으셨습니다."); 
 +     } 
 + 
 +     public void dispense() { 
 +         System.out.println("축하드립니다! 알맹이를 하나 더 받으실 수 있습니다."); 
 +         gumballMachine.releaseBall(); 
 +         if (gumballMachine.getCount() == 0) { 
 +             gumballMachine.setState(gumballMachine.getSoldOutState()); 
 +         } else { 
 +             System.out.println("더 이상 알맹이가 없습니다."); 
 +             gumballMachine.setState(gumballMachine.getSoldOutState()); 
 +         } 
 +     } 
 +
 +</code> 

QR Code
QR Code study:java:design_pattern:state (generated for current page)