Created
April 29, 2026 10:20
-
-
Save Vinnik67/38543f13d44060a44e6d94a41510bd2e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <iostream> | |
| using namespace std; | |
| class Receiver { | |
| bool BankTransfer; | |
| bool MoneyTransfer; | |
| bool PayPalTransfer; | |
| bool CryptoTransfer; // new field | |
| public: | |
| Receiver(bool bt, bool mt, bool ppt, bool ct) { | |
| BankTransfer = bt; | |
| MoneyTransfer = mt; | |
| PayPalTransfer = ppt; | |
| CryptoTransfer = ct; | |
| } | |
| bool GetBankTransfer() { return BankTransfer; } | |
| void SetBankTransfer(bool BankTransfer) { this->BankTransfer = BankTransfer; } | |
| bool GetMoneyTransfer() { return MoneyTransfer; } | |
| void SetMoneyTransfer(bool MoneyTransfer) { this->MoneyTransfer = MoneyTransfer; } | |
| bool GetPayPalTransfer() { return PayPalTransfer; } | |
| void SetPayPalTransfer(bool PayPalTransfer) { this->PayPalTransfer = PayPalTransfer; } | |
| bool GetCryptoTransfer() { return CryptoTransfer; } | |
| void SetCryptoTransfer(bool CryptoTransfer) { this->CryptoTransfer = CryptoTransfer; } | |
| }; | |
| class PaymentHandler { | |
| protected: | |
| PaymentHandler* Successor; | |
| public: | |
| PaymentHandler* GetHandler() { return Successor; } | |
| void SetHandler(PaymentHandler* Successor) { this->Successor = Successor; } | |
| virtual void Handle(Receiver* receiver) = 0; | |
| }; | |
| class BankPaymentHandler : public PaymentHandler { | |
| public: | |
| void Handle(Receiver* receiver) override { | |
| if (receiver->GetBankTransfer()) | |
| cout << "Bank transfer\n"; | |
| else if (Successor != nullptr) | |
| Successor->Handle(receiver); | |
| } | |
| }; | |
| class MoneyPaymentHandler : public PaymentHandler { | |
| public: | |
| void Handle(Receiver* receiver) override { | |
| if (receiver->GetMoneyTransfer()) | |
| cout << "Transfer through money transfer systems\n"; | |
| else if (Successor != nullptr) | |
| Successor->Handle(receiver); | |
| } | |
| }; | |
| class PayPalPaymentHandler : public PaymentHandler { | |
| public: | |
| void Handle(Receiver* receiver) override { | |
| if (receiver->GetPayPalTransfer()) | |
| cout << "Transfer via PayPal\n"; | |
| else if (Successor != nullptr) | |
| Successor->Handle(receiver); | |
| } | |
| }; | |
| class CryptoPaymentHandler : public PaymentHandler { | |
| public: | |
| void Handle(Receiver* receiver) override { | |
| if (receiver->GetCryptoTransfer()) | |
| cout << "Transfer via cryptocurrency\n"; | |
| else if (Successor != nullptr) | |
| Successor->Handle(receiver); | |
| } | |
| }; | |
| void Request(PaymentHandler* h, Receiver* receiver) { | |
| h->Handle(receiver); | |
| } | |
| int main() { | |
| PaymentHandler* bankPaymentHandler = new BankPaymentHandler(); | |
| PaymentHandler* moneyPaymentHandler = new MoneyPaymentHandler(); | |
| PaymentHandler* paypalPaymentHandler = new PayPalPaymentHandler(); | |
| PaymentHandler* cryptoPaymentHandler = new CryptoPaymentHandler(); | |
| bankPaymentHandler->SetHandler(paypalPaymentHandler); | |
| paypalPaymentHandler->SetHandler(moneyPaymentHandler); | |
| moneyPaymentHandler->SetHandler(cryptoPaymentHandler); | |
| Receiver* receiver = new Receiver(false, false, false, true); | |
| Request(bankPaymentHandler, receiver); | |
| delete receiver; | |
| receiver = new Receiver(false, true, false, false); | |
| Request(bankPaymentHandler, receiver); | |
| delete receiver; | |
| receiver = new Receiver(true, false, false, false); | |
| Request(bankPaymentHandler, receiver); | |
| delete receiver; | |
| receiver = new Receiver(false, false, true, false); | |
| Request(bankPaymentHandler, receiver); | |
| delete receiver; | |
| delete bankPaymentHandler; | |
| delete moneyPaymentHandler; | |
| delete paypalPaymentHandler; | |
| delete cryptoPaymentHandler; | |
| system("pause"); | |
| return 0; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment