인생을 코딩하다.

[Java]팩터리 메서드 패턴 본문

Java

[Java]팩터리 메서드 패턴

Hyung1 2021. 2. 14. 06:26
728x90
반응형

팩토리는 공장을 의미한다. 공장은 물건을 생산하는데 객체 지향에서 팩터리는 객체를 생성한다. 결국 팩터리 메서드는 객체를 생성 반환하는 메서드를 말한다. 여기에 패턴이 붙으면 하위 클래스에서 팩터리 메서드를 오버라이딩 해서 객체를 반환하게 하는 것을 의미한다.          

package DesignPattern.FactoryMethodPattern;

public abstract class Animal {
    // 추상 팩터리 메서드
    abstract AnimalToy getToy();
}
package DesignPattern.FactoryMethodPattern;

// 팩터리 메서드가 생성할 객체의 상위 클래스
public abstract class AnimalToy {
    abstract void identify();
}
package DesignPattern.FactoryMethodPattern;

public class Dog extends Animal{
    // 추상 팩터리 메서드 오버라이딩
    @Override
    AnimalToy getToy() {
        return new DogToy();
    }
}
package DesignPattern.FactoryMethodPattern;

// 팩터리 메서드가 생성할 객체
public class DogToy extends AnimalToy{
    public  void identify() {
        System.out.println("나는 테니스공! 강아지의 친구!");
    }
}
package DesignPattern.FactoryMethodPattern;

public class Cat extends Animal{
    // 추상 팩터리 메서드 오버라이딩
    @Override
    AnimalToy getToy() {
        return new CatToy();
    }
}
package DesignPattern.FactoryMethodPattern;

// 팩터리 메서드가 생성할 객체
public class CatToy extends AnimalToy{
    @Override
    public void identify() {
        System.out.println("나는 캣타워! 고양이의 친구");
    }
}
package DesignPattern.FactoryMethodPattern;

public class Driver {
    public static void main(String[] args) {
        // 팩터리 메서드를 보유한 객체들 생성
        Animal bolt = new Dog();
        Animal kitty = new Cat();

        // 팩터리 메서드가 반환하는 객체들
        AnimalToy boltBall = bolt.getToy();
        AnimalToy kittyTower = kitty.getToy();

        // 팩터리 메서드가 반환한 객체들을 사용
        boltBall.identify();
        kittyTower.identify();
    }
}
// 출력
나는 테니스공! 강아지의 친구!
나는 캣타워! 고양이의 친구

 

즉, 오버라이드된 메서드가 객체를 반환하는 패턴

 

출처

www.aladin.co.kr/shop/wproduct.aspx?ItemId=55641908

728x90
반응형

'Java' 카테고리의 다른 글

[Java]마커 인터페이스와 Serializable 동작 방식  (0) 2021.02.18
[Java]ArrayDeque  (0) 2021.02.15
[Java]일급 컬렉션  (0) 2021.02.11
[Java]프록시 패턴(Proxy Pattern)  (0) 2021.02.09
[Java] 어댑터 패턴(Adapter Pattern)  (0) 2021.02.08
Comments