제품을 추상화 한 Product 인터페이스
public interface Product {
void use();
}
제품 중 하나인 IDCard 클래스
public class IDCard implements Product{
private final String owner;
public IDCard(String owner) {
this.owner = owner;
}
@Override
public void use() {
System.out.println(owner + "님의 카드를 사용합니다.");
}
}
Factory 인터페이스
public interface Factory {
Product createProduct(String name);
}
구체적인 객체를 생성해주는 IDCardFactory
public class IDCardFactory implements Factory{
@Override
public Product createProduct(String name) {
return new IDCard(name);
}
}
Main 클래스
import org.example.factory.IDCardFactory;
import org.example.factory.Product;
public class Main {
public static void main(String[] args) {
IDCardFactory factory = new IDCardFactory();
Product idCard1 = factory.createProduct("홍길동");
Product idCard2 = factory.createProduct(" 한석봉");
idCard1.use();
idCard2.use();
}
}
- 객체를 생성하는 메서드는 노출이 되어있지만 그 안의 코드들은 숨겨져 있는 것
- 실제로 Main에서 IDCard 자체는 import를 하지 않고 있는데 기능은 사용하고 있다
- 결합도가 떨어진다(Main에서 IDCard 를 import 하지 않음)