2014년 12월 16일 화요일

[자바디자인패턴]팩토리 메소드 패턴(Factory Method Pattern)[구로JSP자바교육학원/구로디지털자바,서블릿학원/스프링,마이바티스교육/실무스프링교육]

[자바디자인패턴]팩토리 메소드 패턴(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();
}
}



[결과]
현대 ,소나타











 [100%환급,실무전문]SQL/빅데이터/자바/스프링/웹퍼블리싱/안드…오라클자바…12-272865
 [채용확정무료교육]오라클자바개발잘하는신입뽑기2개월과정,교육…오라클자바…12-112090
53 [평일100%환급7건]웹퍼블리싱,자바&JSP,안드로이드,C#닷넷,SQL기… 오라클자바…03-151941
52 [주말]C#,ASP.NET마스터 오라클자바…01-312082
51 [기업100%환급,평일주간]SQL기초에서스키마오브젝트,PLSQL,힌트… 오라클자바…01-313039
50 [주말주간]자바&웹,jQUERY,스프링프레임워크,마이바티스 오라클자바…01-311607
49 [평일주간/야간,주말주간/야간]Spring,MyBatis,Hibernate개발자… 오라클자바…01-191934
48 [평일주간/야간,주말주간/야간]안드로이드개발자과정(Adnroid 교… 오라클자바…01-111794
47 [평일야간,주말주간야간]JAVA,Network&JSP&Spring,MyBatis,Hiber… 오라클자바…01-032401
46 [100%환급,실무전문]SQL/빅데이터/자바/스프링/웹퍼블리싱/안드… 오라클자바…12-272865
45 [주말야간]개발자를위한PLSQL,SQL튜닝,힌트(토/일) 오라클자바…12-192014
44 [평일주간/야간,주말주간/야간]웹퍼블리싱 마스터(HTML5,CSS3,jQ… 오라클자바…12-141981
43 [채용확정무료교육]오라클자바개발잘하는신입뽑기2개월과정,교육… 오라클자바…12-112090
42 [주말야간]JAVA,JSP,Spring,PLSQL,힌트,웹퍼블리싱,안드로이드,… 오라클자바…12-091625
41 [평일야간,주말야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 오라클자바…12-011846
40 [기업100%환급]오라클&자바웹스프링신입과정3주(SQL,JAVA,JSP,Se… 오라클자바…12-012089
39 [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) 오라클자바…12-011498

댓글 없음:

댓글 쓰기