프록시 패턴

런던행·2020년 8월 8일
0

프록시 패턴의 역할

  • 특정 객체의 대리 객체를 제공해 접근을 제어
  • 분산 구조를 지원하기 위한 레이어 또는 인터페이스를 제공
  • 의도하지 않은 케이스로부터 객체를 보호

프록시 패턴 사용 사례

결제 시스템, 현금카드의 카드정보를 통해서 판매자의 계좌로 돈이 인출

# client

class You:
    def __init__(self):
        print("Yout::: lets buy the shirt")
        self.debitCard= DebitCard()
        self.isPurchased = None

    def make_payemnt(self):
        self.isPurchased = self.debitCard.do_pay()

    def __del__(self):
        if self.isPurchased:
            print("You:: Wow! Shirt is Mine")
        else:
            print("You:: I should earn more:")


# Subject Class

from abc import ABCMeta, abstractmethod
class Payemnt(metaclass=ABCMeta):

    @abstractmethod
    def do_pay(self):
        pass

# RealSubject
class Bank(Payemnt):

    def __init__(self):
        self.card = None
        self.account = None

    def __getAccount(self):
        self.account = self.card
        return self.account

    def __hasFunds(self):
        return True

    def setCard(self, card):
        self.card = card

    def do_pay(self):
        if self.__hasFunds():
            print("Bank:: Paying the merchant")
            return True

        else:
            print("Bank:: sorry, not enough funds!")
            return False


# proxy
class DebitCard(Payemnt):

    def __init__(self):
        self.bank = Bank()

    def do_pay(self):

        card = input('proxy:: punch in card number')

        self.bank.setCard(card)
        return self.bank.do_pay()


you = You()
you.make_payemnt()

퍼사드와 프록시 패턴 비교

  • 퍼사드와 프록시 패턴은 구조 디자인 패턴이다. 실 객체 클래스 앞에 플록시/퍼사드 객체를 두는 구조는 같다.
    프록시 패턴 퍼사드 패턴
    실 객체의 대리 객체를 제공해 접근을 제어한다. 클래스의 서브시스템에 대한 인터페이스를 제공한다.
    타겍 객체과 동일한 인터페이스 구조를 가지면 타겟에 대한 참조를 가지고 있다. 서브시스템 간의 의존도와 통신을 최소화 한다.
    클라이언트와 감싸고 있는 객체 사이의 중재자 역할을 한다. 퍼사드 객체는 하나의 통합된 간단한 인터페이스를 제공한다.
profile
unit test, tdd, bdd, laravel, django, android native, vuejs, react, embedded linux, typescript

0개의 댓글