2019年5月13日 星期一

7天學會設計模式 CHAP03 簡單工廠模式 Simple Factory

7天學會設計模式
http://www.books.com.tw/products/0010750585

chap03.
簡單工廠模式 Simple Factory
目的:定義一個簡單工廠,傳入不同的參數取得不同的類別物件。
package com.ssc24.chap03.demo01;
public interface Adventurer {
 public String getType();
}

package com.ssc24.chap03.demo01;
public class Archer implements Adventurer {
 @Override
 public String getType() {
  System.out.println("我是弓箭手");
  return this.getClass().getSimpleName();
 }
}

package com.ssc24.chap03.demo01;
public class Warrior implements Adventurer {
 @Override
 public String getType() {
  System.out.println("我是戰士");
  return this.getClass().getSimpleName();
 }
}

package com.ssc24.chap03.demo01;
public class TrainingCampFactory {
 public static Adventurer trainAdventurer(String type) {
  switch (type) {
   case "archer": {
    System.out.println("弓箭手生產完成");
    return new Archer();
   }
   case "warrior" : {
    System.out.println("戰士生產完成");
    return new Warrior();
   }
   default:
    return null;
  }
 }
}

package com.ssc24.chap03.demo01;
import static org.junit.Assert.*;
import org.junit.Test;
import junit.framework.Assert;
public class VillageTest {
 @SuppressWarnings("deprecation")
 @Test
 public void test() {
  Adventurer memberA = TrainingCampFactory.trainAdventurer("archer");
  Assert.assertEquals(memberA.getType(), "Archer");
  
  Adventurer memberB = TrainingCampFactory.trainAdventurer("warrior");
  Assert.assertEquals(memberB.getType(), "Warrior");
 }
}

/**
===簡單工廠模式測試===
弓箭手生產完成
我是弓箭手
戰士生產完成
我是戰士
**/