As i wish

[Design pattern] Facade pattern (퍼사드패턴) 본문

Design Pattern

[Design pattern] Facade pattern (퍼사드패턴)

어면태 2019. 4. 22. 00:49

이번엔 퍼사드 패턴에 대하여 포스팅 해보겠습니다.

퍼사드 패턴은 어댑터 패턴과 상당히 비슷하기 때문에

두개를 비교해 가시면서 보시면 훨씬 쉬울것 같네요.

일단 정의 부터..

퍼사드 패턴

어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공합니다. 퍼사드에서 고수준 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 사용할 수 있습니다.

 

예를 들어 영화를 본다고 생각했을 때에

1. 팝콘 기계를 켠다.

2. 팝콘 튀기기 시작

3. 전등을 어둡게 조절

4. 스크린을 내린다

5. 프로젝터를 켠다

6. 프로젝터.....

이렇게 쭈욱 일련의 과정들이 있죠.

간단하게 이런 일련의 과정들을 묶어주는것이라고 생각하면 쉽다.

바로 코드로 확인해보면 한눈에 쉽게 확인 할 수 있다.

# -*- coding: utf-8 -*-
# Facade Pattern
 
import abc

class HomeTheaterFacade:
  def __init__(self, amp, tuner, dvd, cd, projector, screen, lights, popper):
    self.amp = amp
    self.tuner = tuner
    self.dvd = dvd
    self.cd = cd
    self.projector = projector
    self.screen = screen
    self.lights = lights
    self.popper = popper

  def watchMovie(self, dvd):
    self.popper.on()
    self.popper.pop()
    self.lights.dim(10)
    self.screen.down()
    self.projector.on()
    self.projector.wideScreenMovie()
    self.amp.on()
    self.amp.setDvd(dvd)
    self.amp.setSurround()
    self.amp.setVolume(5)
    self.dvd.on()
    self.dvd.play()

class Amp:
  def on(self):
    print("Amp on")

  def setDvd(self, dvd):
    print("Set dvd %s" % dvd)

  def setSurround(self):
    print("Set surround")

  def setVolume(self, volume):
    print("Set volume %s" % volume)

class Tuner:
  pass

class Dvd:
  def on(self):
    print("Dvd on")

  def play(self):
    print("Dvd play")

class Cd:
  pass

class Projector:
  def on(self):
    print("Projector on")

  def wideScreenMovie(self):
    print("Projector widescreenmovie")

class Screen:
  def down(self):
    print("Screen down")

class Lights:
  def dim(self, dim):
    print ("Light dim %s" % dim)

class Popper:
  def on(self):
    print("Popper on")

  def pop(self):
    print("Popper pop")

amp = Amp()
tuner = Tuner()
dvd = Dvd()
cd = Cd()
projector = Projector()
screen = Screen()
lights = Lights()
popper = Popper()

homeTheater = HomeTheaterFacade(amp, tuner, dvd, cd, projector,
                                screen, lights, popper)
homeTheater.watchMovie('FACADEPATTER DVD')

HomeTheaterFacade 가 Facade클래스라고 생각하면된다.

이렇게 사용하면 원래 사용하던 Amp, Tuner, Dvd 등등 역시 그대로 사용할 수 있게 된다.

마지막으로 결과창이닷

Comments