Одно из мест, где я использую шаблоны для создания собственного кода, - это реализация классов политик, как описано Андреем Александреску в книге «Современный дизайн C ++». В настоящее время я работаю над проектом, который включает набор классов, которые взаимодействуют с монитором BEA \ h \ h \ h Oracle Tuxedo TP.
Одно из средств, которое предоставляет Tuxedo, - это постоянные очереди транзакций, поэтому у меня есть класс TpQueue, который взаимодействует с очередью:
class TpQueue {
public:
void enqueue(...)
void dequeue(...)
...
}
Однако, поскольку очередь является транзакционной, мне нужно решить, какое поведение транзакции я хочу; это можно было бы сделать отдельно вне класса TpQueue, но я думаю, что это будет более явным и менее подверженным ошибкам, если каждый экземпляр TpQueue имеет свою собственную политику в отношении транзакций. Итак, у меня есть набор классов TransactionPolicy, таких как:
class OwnTransaction {
public:
begin(...) // Suspend any open transaction and start a new one
commit(..) // Commit my transaction and resume any suspended one
abort(...)
}
class SharedTransaction {
public:
begin(...) // Join the currently active transaction or start a new one if there isn't one
...
}
И класс TpQueue переписывается как
template <typename TXNPOLICY = SharedTransaction>
class TpQueue : public TXNPOLICY {
...
}
Итак, внутри TpQueue я могу вызывать begin (), abort (), commit () по мере необходимости, но могу изменить поведение в зависимости от того, как я объявляю экземпляр:
TpQueue<SharedTransaction> queue1 ;
TpQueue<OwnTransaction> queue2 ;
person
Jackson
schedule
26.10.2008