// State Pattern

// 객체의 상태가 바뀔때마다 행위가 바뀌게 되는 객체들을 '조직화' 하는 디자인 기법


  1. // Item의 상태에 따라 캐릭터의 동작을 변경
  2. // 캐릭터의 동작을 정의한 인터페이스 생성
  3. interface IState {
  4.         public void run();
  5.         public void attack();
  6. }
  7.  
  8. class NormalState implements IState {
  9.  
  10.         @Override
  11.         public void run() {
  12.                 System.out.println("run");
  13.         }
  14.  
  15.         @Override
  16.         public void attack() {
  17.                 System.out.println("attack");
  18.         }
  19.        
  20. }
  21. class FastState implements IState {
  22.  
  23.         @Override
  24.         public void run() {
  25.                 System.out.println("fast run");
  26.         }
  27.  
  28.         @Override
  29.         public void attack() {
  30.                 System.out.println("fast attack");
  31.         }
  32.        
  33. }
  34. class SlowState implements IState {
  35.  
  36.         @Override
  37.         public void run() {
  38.                 System.out.println("slow run");
  39.         }
  40.  
  41.         @Override
  42.         public void attack() {
  43.                 System.out.println("slow attack");
  44.         }
  45.        
  46. }
  47. class Character {
  48.         private int gold;
  49.         private IState state;
  50.        
  51.         public Character(NormalState normalState) {
  52.                 state = normalState;
  53.         }
  54.  
  55.         public void setState(IState state) {
  56.                 this.state = state;
  57.         }
  58.        
  59.         // Replace type code with Polymorphism
  60.         // 상속을 통한 오버라이딩
  61.         public void run() {
  62.                 state.run();
  63.         }
  64.         public void attack() {
  65.                 state.attack();
  66.         }
  67.         public void useGold(int i) {
  68.                 gold -= i;
  69.                 System.out.println("put " + i + " / " + gold);
  70.         }
  71.         public void addGold(int i) {
  72.                 gold += i;
  73.                 System.out.println("get " + i + " / " + gold);
  74.         }
  75. }
  76.  
  77. public class Ex3 {
  78.         public static void main(String...args) {
  79.                 Character c = new Character(new NormalState());
  80.                
  81.                 IState f = new FastState();
  82.                 IState s = new SlowState();
  83.                
  84.                 c.run();
  85.                
  86.                 // item
  87.                 c.setState(f);
  88.                 c.run();
  89.                 c.addGold(100);
  90.                
  91.                 c.setState(s);
  92.                 c.run();
  93.                
  94.         }
  95. }


'java > design_pattern' 카테고리의 다른 글

Flyweight Pattern  (0) 2014.06.27
Prototype Pattern  (0) 2014.06.27
Decorator Pattern  (0) 2014.06.27
Composite Pattern  (0) 2014.06.27
Strategy Pattern  (0) 2014.06.27

+ Recent posts