Skip to content

Instantly share code, notes, and snippets.

@jsstrn
Created October 3, 2018 12:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jsstrn/d4aae73630fcf62c226451591abad013 to your computer and use it in GitHub Desktop.
Save jsstrn/d4aae73630fcf62c226451591abad013 to your computer and use it in GitHub Desktop.
class Payment {
constructor() {
this.paymentMethod = ''
}
setPaymentMethod(paymentMethod) {
this.paymentMethod = paymentMethod
}
pay(amount) {
this.paymentMethod.pay(amount)
}
}
class CashPayment {
constructor() {}
pay(amount) {
// make payment
}
}
class CreditPayment {
constructor() {}
pay(amount) {
// make payment
}
}
const payment = new Payment()
const cash = new CashPayment()
const credit = new CreditPayment()
payment.setPaymentMethod(credit)
payment.pay() // pay with credit
payment.setPaymentMethod(cash)
payment.pay() // pay with cash
@tmhung88
Copy link

tmhung88 commented Oct 4, 2018

Personally, Payment would rather be an interface than an actual class because Payment doesn't hold any logic. I imagine there is a scenario that an user is able to set his payment option as Credit

User  {
   constructor() {
       this.payment = new CashPayment(); // default
   }


   setPaymentMethod(payment) {
      this.payment = payment;
   }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment