결제 시스템, 현금카드의 카드정보를 통해서 판매자의 계좌로 돈이 인출
# 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()
프록시 패턴 | 퍼사드 패턴 |
실 객체의 대리 객체를 제공해 접근을 제어한다. | 클래스의 서브시스템에 대한 인터페이스를 제공한다. |
타겍 객체과 동일한 인터페이스 구조를 가지면 타겟에 대한 참조를 가지고 있다. | 서브시스템 간의 의존도와 통신을 최소화 한다. |
클라이언트와 감싸고 있는 객체 사이의 중재자 역할을 한다. | 퍼사드 객체는 하나의 통합된 간단한 인터페이스를 제공한다. |