728x90
β» Java μΈμ΄λ‘ λ°°μ°λ λμμΈ ν¨ν΄ μ λ¬Έ(μμ§λ·μ»΄) λμλ₯Ό λ°νμΌλ‘ μμ±λ λ΄μ©μ λλ€.
Factory Method(νν 리 λ©μλ) ν¨ν΄ μκ°
- Template Method ν¨ν΄μ μΈμ€ν΄μ€ μμ±μ μΈ‘λ©΄μ μ μ©ν ν¨ν΄
- μλμ Factory Method ν¨ν΄ ꡬ쑰μμλ Createsκ° Template Methodμ ν΄λΉ
- μΈμ€ν΄μ€λ₯Ό λ§λλ λ°©λ²μ μμ ν΄λμ€μμ κ²°μ νμ§λ§ ꡬ체μ μΈ ν΄λμ€ μ΄λ¦κΉμ§ κ²°μ νμ§ μμΌλ©° ꡬ체μ μΈ λ΄μ©μ λͺ¨λ νμ ν΄λμ€μμ μν
- μμ ν΄λμ€μμλ 곡μ (μ€κ³)λ§ μ μΈ, νμ ν΄λμ€μμ 곡μ μ ꡬ체μ μΈ λμμ ꡬν
μμ νλ‘κ·Έλ¨ - IDμΉ΄λ 곡μ₯
- Product ν΄λμ€ (Product.java)
- μΆμ ν΄λμ€λ‘ ꡬνλ Product(μ ν)μ μν
package framework;
public abstract class Product {
public abstract void use();
}
- Factory ν΄λμ€ (Factory.java)
- 곡μ μ λ΄κ³ μλ Creater(μμ±μ)μ μν
- Productλ₯Ό μμ°νλ 곡μ κ³Όμ μ λ΄κ³ μμ
package 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);
}
- IDCard ν΄λμ€ (IDCard.java)
- ConcreteProduct(ꡬ체μ μΈ μ ν)μ μν
- Productλ₯Ό μμ λ°μ ꡬ체μ μΌλ‘ ꡬν
package idcard;
import framework.*;
public class IDCard extends Product {
private String owner;
public IDCard(String owner) {
System.out.println(owner + "μ μΉ΄λλ₯Ό λ§λλλ€.");
this.owner = owner;
}
@Override
public void use() {
System.out.println(owner + "μ μΉ΄λλ₯Ό μ¬μ©ν©λλ€.");
}
public String getOwner() {
return owner;
}
}
- IDCardFactory ν΄λμ€ (IDCard.java)
- ConcreteFactory μν
- Factoryλ₯Ό μμλ°μ ꡬ체μ μΌλ‘ 곡μ λ΄μ©μ ꡬν
package idcard;
import framework.*;
import java.util.*;
public class IDCardFactory extends Factory {
private List owners = new ArrayList();
@Override
protected Product createProduct(String owner) {
return new IDCard(owner);
}
@Override
protected void registerProduct(Product product) {
owners.add(((IDCard)product).getOwner());
}
public List getOwners() {
return owners;
}
}
- Main ν΄λμ€ (Main.java)
import framework.*;
import idcard.*;
public class Main {
public static void main(String[] args) {
Factory factory = new IDCardFactory();
Product card1 = factory.create("νκΈΈλ");
Product card2 = factory.create("λ°κΈΈλ");
Product card3 = factory.create("μ΄κΈΈλ");
card1.use();
card2.use();
card3.use();
}
}
μ₯μ κ³Ό λ¨μ
μ₯μ
- framework ν¨ν€μ§λ idcard ν¨ν€μ§μ μμ‘΄νμ§ μλλ€.
- OCP κ°μ²΄μ§ν₯ μμΉμ λ°λ₯Έλ€.
- Client(Main)μ μ μ₯μμ ꡬ체μ μΈ κ³΅μ μ΄ μΆκ°λμ΄λ Template Method(Creates)λ§ μλ©΄ λμ΄ κ°νΈνλ€.
λ¨μ
- μΆμ λ©μλ μ¬μ© μ νμ ν΄λμ€μμ ν΄λΉ λ©μλλ₯Ό ꡬννμ§ μμΌλ©΄ μ»΄νμΌ λ¬Έμ κ° μκΈ΄λ€.
→ λν΄νΈμ ꡬν μ€λΉ, μλ¬ μ΄μ© - Provider(μ 곡μ) μ μ₯μμ μ ν 곡μ μ΄ λμ΄λ¨μ λ°λΌ μΆκ°λλ ν΄λμ€κ° λ§μμ§λ€.
728x90