인터페이스를 이용해서 클래스와 객체의 결합도를 낮춰서 객체를 생성하는 방법
Factory
팩토리의 인스턴스 생성 자체는 super클래스가 가지고있고, 서브클래스에서 그것을 실제로 구현하는 코드를 위임받아서 작성하는 패턴
public class Main {
public static void main(String[] args) {
factory();
}
private static void factory()
{
//super클래스 Main
//실제 구현은 IDCard와, IDCradFactory에서 인터페이스를 받아서 구현한다
//단, Main클래스 어디에도 IDCard클래스는 등장하지 않는다 -> 결합도를 낮춘것
IDCardFactory factory = new IDCardFactory();
Product idCard1 = factory.createProduct("최운식");
Product idCard2 = factory.createProduct("채벼리");
idCard1.use();
idCard2.use();
BookFactory bookFactory = new BookFactory();
Product javaBook = bookFactory.createProduct("자바 프로그래밍 마스터");
Product algoBook = bookFactory.createProduct("알고리즘 킹왕짱");
javaBook.use();
algoBook.use();
}
}
최운식님의 카드를 사용합니다
채벼리님의 카드를 사용합니다
자바 프로그래밍 마스터을 읽습니다
알고리즘 킹왕짱을 읽습니다
동일 인터페이스를 사용해서 다른 객체들을 구현한 결과이다. 따로 new를 통해 의존관계를 주지 않고도 인터페이스의 Factory라는 형태의 클래스를 통해서 다양한 형태의 객체를 생성할 수 있다
public interface Factory {
Product createProduct(String name);
}
public interface Product {
void use();
}
public class Book implements Product{
String bookName;
public Book(String bookName) {
this.bookName = bookName;
}
@Override
public void use() {
System.out.println(bookName+"을 읽습니다");
}
}
public class BookFactory implements Factory{
@Override
public Product createProduct(String name) {
return new Book(name);
}
}