Proxy Design Pattern in C++
"A protection proxy controls access to the original object"
class Person
{
string nameString;
static string list[];
static int next;
public:
Person()
{
nameString = list[next++];
}
string name()
{
return nameString;
}
};
string Person::list[] =
{
"Tom", "Dick", "Harry", "Bubba"
};
int Person::next = 0;
class PettyCashProtected
{
int balance;
public:
PettyCashProtected()
{
balance = 500;
}
bool withdraw(int amount)
{
if (amount > balance)
return false;
balance -= amount;
return true;
}
int getBalance()
{
return balance;
}
};
class PettyCash
{
PettyCashProtected realThing;
public:
bool withdraw(Person &p, int amount)
{
if (p.name() == "Tom" || p.name() == "Harry" || p.name() == "Bubba")
return realThing.withdraw(amount);
else
return false;
}
int getBalance()
{
return realThing.getBalance();
}
};
int main()
{
PettyCash pc;
Person workers[4];
for (int i = 0, amount = 100; i < 4; i++, amount += 100)
if (!pc.withdraw(workers[i], amount))
cout << "No money for " << workers[i].name() << '\n';
else
cout << amount << " dollars for " << workers[i].name() << '\n';
cout << "Remaining balance is " << pc.getBalance() << '\n';
}
Output
100 dollars for Tom
No money for Dick
300 dollars for Harry
No money for Bubba
Remaining balance is 100
Support our free website and own the eBook!
- 22 design patterns and 8 principles explained in depth
- 406 well-structured, easy to read, jargon-free pages
- 228 clear and helpful illustrations and diagrams
- An archive with code examples in 4 languages
- All devices supported: EPUB/MOBI/PDF formats
Learn more...