2014년 5월 29일 목요일

[자바디자인패턴]팩토리 메소드 패턴(Factory Method Pattern),오라클자바커뮤니티 자바디자인패턴강좌

[자바디자인패턴]팩토리 메소드 패턴(Factory Method Pattern),오라클자바커뮤니티 자바디자인패턴강좌

객체지향 디자인 패턴이란 소프트웨어 설계 시 특정 상황에서 자주 만나는 문제를 해결하기 위해 사용할수 있는 재사용 가능한 솔루션을 이야기 하는데, 그중 하나인 팩토리 메소드 패턴(Factory Method Pattern)은 어떤 클래스의 인스턴스를 만들지를 서브 클래스에서 결정하도록 하며 팩토리 메소드를 이용하여 인스턴스를 만드는 일을 서브 클래스한테 시키는 것 이다

하위클래스에서 오브젝트 생성 방법과 클래스를 결정할 수 있도록 미리 정의해둔 메소드를 팩토리 메소드라 하고 이방식을 통해 오브젝트 생성방법을 나머지 로직, 즉 슈퍼클래스의 기본 코드에서 독립시키는 방법을 팩토리 메소드 패턴이라 하는데 이 메소드는 주로 인터페이스 타입으로 오브젝트를 리턴한다.

객체를 생성하기 위한 인터페이스를 만들며 팩토리패턴에서 객체를 생성하는 일을 전담하는 클래스를 Factory라 한다.

자바에서 종종 오브젝트를 생성하는 기능을 가진 메소드를 일반적으로 팩토리 메소드라고 부르기도 하는데 이때 말하는 팩토리 메소드와는 다르다는 것을 알자.

- 객체 생성의 책임을 하위 클래스에 위임시키고 어느 하위 클래스가 위임했는지에 대한 정보를 은닉하고자 하는 경우 

- 객체를 생성하기 위해 인터페이스를 정의하지만 어떤 클래스의 객체를 생성할 지에 대해서는 하위 클래스에서 결정, 클래스 상속을 이용

- Factory Method 패턴에서는 상속을 이용하여 객체 생성을 파생클래스에게 위임하여 실제 생성되는 객체는 파생 클래스가 결정하도록 한다.



아래 예제를 실습하고, 창의적인 예제를 만들어 답변글로 제출 부탁드립니다.

package factory;

//Factory Method 패턴은  생성하고자 하는 객체의 클래스(CarMaker)와 
//이를 생성하는 클래스(CarMakerFactory)의 인터페이스만 공개하여 재사용성을 높입니다.


//factory class
abstract class Factory {
    public final CarMaker create(String name) {
        CarMaker c = createMaker(name);
        return c;
    }
    protected abstract CarMaker createMaker(String name);
}

abstract class CarMaker {
abstract void sell();
}

class Hyundai extends CarMaker {
public String name;
Hyundai(String name) {
this.name = name;
}
void sell() {
System.out.println("현대 ," + name);
}
}

//Factory의 하위클래스에서 객체 생성
class CarMakerFactory extends Factory {
    protected CarMaker createMaker(String name) {
        return new Hyundai(name);
    }
}

public class FactoryMethodTest {
//Main 클래스는 생성하고자 하는 Hyundai를 직접 new로 생성하지 않고,
//CarMakerFactory의 createMaker() 인터페이스를 이용하여 생성합니다.
public static void main(String[] args) {
Factory f = new CarMakerFactory();
CarMaker h = f.createMaker("소나타");
h.sell();
}
}



[결과]
현대 ,소나타






 

댓글 없음:

댓글 쓰기