[자바디자인패턴]팩토리 메소드 패턴(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();
}
}
[결과]
현대 ,소나타
오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com
평일주간(9:30~18:20) 개강
(6/09)[기업100%환급]SQL기초에서 Schema Object까지
(6/09)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(6/09)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(6/16)[기업100%환급]안드로이드개발자과정
(6/16)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(6/16)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(6/23)[교육전취업확정,채용예정자교육]Spring,MyBatis,XPlatform실무프로젝트과정
평일야간(19:00~21:50) 개강
(6/03)안드로이드개발자과정
(6/03)웹퍼블리싱 마스터
(6/09)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(6/10)C#4.0, ADO.NET, Network 프로그래밍
(6/10)Spring3.X, MyBatis, Hibernate실무과정
(6/18)C#,ASP.NET마스터
(6/26)SQL초보에서실전전문가까지
주말(10:00~17:50) 개강
(5/31)Spring3.X, MyBatis, Hibernate실무과정
(5/31)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(5/31)SQL초보에서실전전문가까지
(5/31)C#,ASP.NET마스터
(6/14)실무예제로 배워보는 jQuery(개발자/디자이너를위한)
(6/14)안드로이드개발자과정
주말저녁(18:30~22:20) 개강
(6/21)JAVA,Network&WEB&Framework
(6/21)SQL기초에서실무까지
www.oraclejavacommunity.com
평일주간(9:30~18:20) 개강
(6/09)[기업100%환급]SQL기초에서 Schema Object까지
(6/09)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(6/09)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(6/16)[기업100%환급]안드로이드개발자과정
(6/16)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(6/16)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(6/23)[교육전취업확정,채용예정자교육]Spring,MyBatis,XPlatform실무프로젝트과정
평일야간(19:00~21:50) 개강
(6/03)안드로이드개발자과정
(6/03)웹퍼블리싱 마스터
(6/09)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(6/10)C#4.0, ADO.NET, Network 프로그래밍
(6/10)Spring3.X, MyBatis, Hibernate실무과정
(6/18)C#,ASP.NET마스터
(6/26)SQL초보에서실전전문가까지
주말(10:00~17:50) 개강
(5/31)Spring3.X, MyBatis, Hibernate실무과정
(5/31)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(5/31)SQL초보에서실전전문가까지
(5/31)C#,ASP.NET마스터
(6/14)실무예제로 배워보는 jQuery(개발자/디자이너를위한)
(6/14)안드로이드개발자과정
주말저녁(18:30~22:20) 개강
(6/21)JAVA,Network&WEB&Framework
(6/21)SQL기초에서실무까지
댓글 없음:
댓글 쓰기