Search results for '생성패턴'

생성(Creational) 패턴 - Abstract Factory

2007/05/19 12:36
추상화 팩토리 패턴은 팩토리 패턴보다 더 추상화한 단계. 이 패턴은 연관된 객체의 여러 클래스들 중의 하나를 반환하고자 할 때 사용할 수 있음. 즉, 추상화 팩토리는 여러 팩토리들 중의 하나를 반환하는 팩토리 객체.
추상화 팩토리의 고전적인 응용중의 하나는 컴퓨터시스템이 다중의 "룩앤필(look-and-feel)"을 지원하는 경우에서의 사용.

1. 의도
서로 밀접하게 관련된 객체들을 생성할 때 그들의 클래스가 무엇인지 구체적으로 알지 않고도 연관되어 있는 객체군을 생성할 수 있는 인터페이스를 제공.

2. 고려해야 할 사항
  • 클라이언트는 'product'를 생성하는 방법에 대해서 알 피룡가 없음.
  • 클러이언트는 관련 오브젝트 군을 사용해야 함.
  • 클라이언트가 관련 오브젝트들에 대한 자세한 정보를 알아야 작업을 할 수 잇는 형태일 경우 클라이언트 유지보수가 어려워짐.
3. 구조
사용자 삽입 이미지

Room.java (Language : java)
  1. interface Room {
  2.    public String getDescription();
  3.    public int getRate();
  4. }

RoomA.java (Language : java)
  1. class RoomA implements Room {
  2.    private String description;
  3.    private int rate;
  4.  
  5.    public String getDescription() {
  6.       return description;
  7.    }
  8.  
  9.    public int getRate() {
  10.       return rate;
  11.    ]
  12. }

HotelChain.java (Language : java)
  1. interface HotelChain {
  2.    public Customer createCustomer();
  3.    public Reservation createReservation();
  4.    public Room createRoom();
  5. }

HotelChainA.java (Language : java)
  1. class HotelChainA implements HotelChain {
  2.    public Customer createCustomer() {
  3.       return new CustomerA(...);
  4.    }
  5.  
  6.    public Reservation createReservation() {
  7.       return new ReservationA(...);
  8.    }
  9.  
  10.    public Room createRoom() {
  11.       return new RoomA(...);
  12.    }
  13. }

Client.java (Language : java)
  1. public class Client {
  2.    public static void main(String[] args) {
  3.       HotelChain hotelChain = HotelChainA();
  4.       Customer customer = HotelChain.createCustomer();
  5.       Reservation resv = hotelChain.createReservation();
  6.       Room room = hotelChain.createRoom();
  7.    }
  8. }

4. 자바 프로그래밍 언어에서의 사용 예
사용자 삽입 이미지

  •  J2SE™ 플랫폼에서의 java.awt 패키지에서 Abstract Factory 패턴을 사용.
  • Abstract Factory 패턴이 적용된 것은 Toolkit이라는 클래스가 각종 ComponentPeer객체를 생성하는 팩토리이며 실제로 생성되는 객체들은 CanvasPeer, CheckboxPeer 등이 됨.
  • AbstractFactory가 Toolkit이면 ConcreteFactory는 운영체제별로 존재하는 UvmToolkit, AbstractProduct는 CanvasPeer, CheckboxPeer 등이며, Product는 운영체제의 GUI 콤포넌트 정보를 포함하고 있는 uvm.awt.peer.CanvasPeer,  uvm.awt.peer.CheckboxPeer 등. 이 클래스들은 운영체제마다 사용하는 자바 가상 머신에 따라 다르게 구현.
  • Toolkit 클래스를 상속받은, 운영체제에 종속된 UvmToolkit 클래스는 createCheckbox(), createCanvas() 등을 통해 GUI 콤포넌트 객체를 생성하고 반환.
5. 결과
  • 장점
    제품군을 쉽게 대체할 수 있음.
    클라이언트 콘크리트 클래스 군에 대해 모름. 즉, 클라이언트는 어떤 클래스들을 이용해 오브젝트 군이 생성되는지에 대해 모름.
  • 단점
    새로운 오브젝트 군을 개발하는 작업은 시간이 걸림.
    기존 오브젝트 군에 새로운 멤버를 추가하는 작업은 어려움.


이올린에 북마크하기

happyness Programming/J2EE Patterns , ,

2007/05/19 12:36 2007/05/19 12:36
[로그인][오픈아이디란?]

생성(Creational) 패턴

2007/05/16 15:49
1. 정의 및 특성
  • 정의: 생성에 관련된 패턴은 인스턴스를 만드는 과정을 추상화하는 것으로 객체를 생성, 합성하는 방법이나 객체의 표현 방법에 독립적으로 시스템을 개발할 수 있도록 함
  • 특성: 클라이언트는 정확한 클래스 타입을 몰라도 객체 생성이 가능.
    객체 생성시 사용할 생성자 함수를 클라이언트에게 제공하는 대신 객체 생성을 대신 수행해 주는 메소드를 제공.
    새로운 객체를 새로 생성하는 것과 기존 객체를 재사용하는 지에 대한 정보를 클라이언트에게 노출시키지 않음. 이 특성은 스레드 풀과 같은 자원 사용형태를 쉽게 만들 수 있도록 함.
2. 종류
  • Factory Method 패턴
    매소드 호출을 통해 해당 클래스를 이용한 하나의 오브젝트를 확인
  • Abstract Factory 패턴
    구체적인 클래스를 지정하지 않고 관련성을 갖는 객체들의 집합을 생성
  • Singleton 패턴
    클래스의 인스턴스는 오직 하나임을 보장하며, 이 인스턴스를 모두 억세스할 수 있도록 함.
이올린에 북마크하기

happyness Programming/J2EE Patterns ,

2007/05/16 15:49 2007/05/16 15:49
[로그인][오픈아이디란?]