Chapter 04 Factory Method 하위 클래스에서 인스턴스 만들기 - brodieroy/Study GitHub Wiki
1. 무작정 소스를 다운받아서 봅시다. A2, Sample 가 있더군요.
2. Sample2을 봅시다.
Factory.java
package FactoryMethod.Sample.framework;
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);
}
Product.java
package FactoryMethod.Sample.framework;
public abstract class Product {
public abstract void use();
}
IDCard.java
package FactoryMethod.Sample.idcard;
import FactoryMethod.Sample.framework.*;
public class IDCard extends Product {
private String owner;
IDCard(String owner) {
System.out.println(owner + "의 카드를 만듭니다.");
this.owner = owner;
}
public void use() {
System.out.println(owner + "의 카드를 사용합니다.");
}
public String getOwner() {
return owner;
}
}
IDCardFactory.java
package FactoryMethod.Sample.idcard;
import FactoryMethod.Sample.framework.*;
import java.util.*;
public class IDCardFactory extends Factory {
private List owners = new ArrayList();
protected Product createProduct(String owner) {
return new IDCard(owner);
}
protected void registerProduct(Product product) {
owners.add(((IDCard)product).getOwner());
}
public List getOwners() {
return owners;
}
}
Main.java
package FactoryMethod.Sample;
import FactoryMethod.Sample.framework.*;
import FactoryMethod.Sample.idcard.*;
public class Main {
public static void main(String[] args) {
Factory factory = new IDCardFactory();
Product card1 = factory.create("김-URBAN");
Product card2 = factory.create("양-PARENTAL");
Product card3 = factory.create("김-TECH");
card1.use();
card2.use();
card3.use();
}
}