http://www.books.com.tw/products/0010750585
chap04.
工廠模式 Factory
目的:提供一個工廠介面,將產生實體的程式碼交由子類別各自實現。
package com.ssc24.chap04.demo01;
public interface Adventurer {
public String getType();
}
package com.ssc24.chap04.demo01;
public class Archer implements Adventurer {
@Override
public String getType() {
System.out.println("我是弓箭手");
return this.getClass().getSimpleName();
}
}
package com.ssc24.chap04.demo01;
public class Warrior implements Adventurer {
@Override
public String getType() {
System.out.println("我是戰士");
return this.getClass().getSimpleName();
}
}
package com.ssc24.chap04.demo01;
public interface ITrainingCamp {
public Adventurer trainAdventurer();
}
package com.ssc24.chap04.demo01;
public class ArcherTrainingCamp implements ITrainingCamp {
@Override
public Adventurer trainAdventurer() {
System.out.println("產生一個弓箭手");
return new Archer();
}
}
package com.ssc24.chap04.demo01;
public class WarriorTrainingCamp implements ITrainingCamp {
@Override
public Adventurer trainAdventurer() {
System.out.println("產生一個戰士");
return new Warrior();
}
}
package com.ssc24.chap04.demo01;
import static org.junit.Assert.*;
import org.junit.Test;
import junit.framework.Assert;
public class TrainingCampTest {
@Test
public void test() {
System.out.println("=========== 工廠模式測試 ===========");
ITrainingCamp trainCamp = new ArcherTrainingCamp();
Adventurer memberA = trainCamp.trainAdventurer();
Assert.assertEquals(memberA.getType(), "Archer");
trainCamp = new WarriorTrainingCamp();
Adventurer memberB = trainCamp.trainAdventurer();
Assert.assertEquals(memberB.getType(), "Warrior");
}
} /** =========== 工廠模式測試 =========== 產生一個弓箭手 我是弓箭手 產生一個戰士 我是戰士 **/