Java/design pattern Factory Pattern 우혁이 아빠 2012. 7. 18. 23:47 package com.tistory.tazz009.iterator; public abstract class Factory { public final Product create(String owner) { Product p = createProduct(owner); registerProduct(p); return p; } protected abstract Product createProduct(String owner); protected abstract void registerProduct(Product product); } package com.tistory.tazz009.iterator; public abstract class Product { public abstract void use(); } package com.tistory.tazz009.iterator; import java.util.ArrayList; import java.util.List; public class IDCardFactory extends Factory { private List owners = new ArrayList(); public List getOwners() { return owners; } @Override protected Product createProduct(String owner) { return new IDCard(owner); } @Override protected void registerProduct(Product product) { owners.add(((IDCard) product).getOwner()); } } package com.tistory.tazz009.iterator; public class IDCard extends Product { private String owner; public String getOwner() { return owner; } IDCard(String owner) { System.out.println(owner + "의 카드를 만듭니다."); this.owner = owner; } @Override public void use() { System.out.println(owner + "의 카드를 사용합니다."); } } package com.tistory.tazz009.iterator; import static org.junit.Assert.*; import java.util.List; import org.junit.Test; public class FactoryTest { @Test public void test_001() { Factory factory = new IDCardFactory(); Product card1 = factory.createProduct("홍길동"); factory.registerProduct(card1); Product card2 = factory.createProduct("이순신"); factory.registerProduct(card2); Product card3 = factory.createProduct("강감찬"); factory.registerProduct(card3); card1.use(); card2.use(); card3.use(); List owners = ((IDCardFactory) factory).getOwners(); for (String owner : owners) { System.out.println(owner); } } } 저작자표시