3. The Structural & Facade Design Pattnern
1. 구조 디자인 패턴
-
구조 디자인 패턴의 특징
객체와 클래스가 병합해 더 큰 구조를 만든다.
개체의 관계를 더 쉽게 식별할 수 있다.
클래스 패턴(The Class Pattern)은 상속을 통해 추상화해 인터페이스를 제공
객체 패턴(The Object Pattern)은 한 개의 객체를 더 큰 객체로 확장 -
구조 다자인 패턴 용어 1) 어댑터 패턴(The Adapter Pattern)
크라이언트의 요구에 따라 특정 인터페이스를 다른 인터페이스에 맞춘다.
2) 브릿지 패턴(The Bridge Pattern)
객체의 인터페이스와 구현을 분리해 독립적으로 동작할 수 있게 한다.
3) 데코레이터 패턴(The Decorator Pattern)
런타임에 객체의 책임을 붙인다.
2. 퍼사드 디자인 패턴 개요
퍼사드(facode) : 건물의 정면, 특히 돋보이는 쪽을 의미
-
퍼사드 패턴의 목적
서브시스템의 인터페이스를 통합시킨 단일 인터페이스를 제공해 클라이언트가 쉽게 서브시스템에 접근
단일 인터페이스 객체로 복잡한 시스템을 대체
클라이언트와 내부 구현을 분리 -
퍼사드 패턴의 역할
요청에 알맞는 인터페이스를 알고 있다.
컴포지션을 통해 클라이언트의 요청을 적합한 서브시스템 객체에 전달 -
시스템의 역할
서브시스템의 기능을 구현
퍼사드 객체가 지시한 일을 담당 하지만 퍼사드를 참조하지 않는다. -
클라이언트 역할
퍼사드를 인스턴스화하는 클래스
퍼사드에 서비싀스템을 통해 작업을 수행 -
코드 예시
__author__ = 'Chetan'
class Hotelier(object):
def __init__(self):
print("Arranging the Hotel for Marriage? --")
def __isAvailable(self):
print("Is the Hotel free for the event on given day?")
return True
def bookHotel(self):
if self.__isAvailable():
print("Registered the Booking\n\n")
class Florist(object):
def __init__(self):
print("Flower Decorations for the Event? --")
def setFlowerRequirements(self):
print("Carnations, Roses and Lilies would be used for Decorations\n\n")
class Caterer(object):
def __init__(self):
print("Food Arrangements for the Event --")
def setCuisine(self):
print("Chinese & Continental Cuisine to be served\n\n")
class Musician(object):
def __init__(self):
print("Musical Arrangements for the Marriage --")
def setMusicType(self):
print("Jazz and Classical will be played\n\n")
# 모든 역할을 다하는 클래스
class EventManager(object):
def __init__(self):
print("Event Manager:: Let me talk to the folks\n")
def arrange(self):
self.hotelier = Hotelier()
self.hotelier.bookHotel()
self.florist = Florist()
self.florist.setFlowerRequirements()
self.caterer = Caterer()
self.caterer.setCuisine()
self.musician = Musician()
self.musician.setMusicType()
class You(object):
def __init__(self):
print("You:: Whoa! Marriage Arrangements??!!!")
def askEventManager(self):
print("You:: Let's Contact the Event Manager\n\n")
em = EventManager()
em.arrange()
def __del__(self):
print("You:: Thanks to Event Manager, all preparations done! Phew!")
you = You()
you.askEventManager()
EventManager 객체에서 모든 클래스 생성을 하여 인터페이스를 간소화 시켜준다.
3. 최소지식 원칙
최소지식 원칙은 상호작용하는 객체를 아주 가까운 몇 개의 객체로 최소화 한다.
시스템을 설계할 때 생성하는 모든 객체가 몇 개의 클래스와 연관되며 어떤 식으로 대화하는지 알아야 한다.
지나치게 서로 얽혀있는 클래스를 만드는 것을 지양해야 한다.
클래스 간의 의존도가 높아질수록 시스템 유지보수가 힘들어진다. 한 부분을 수정시 다른 부분이 변경될 수 있음. 주의