2012-04-16 2 views
0

Как добавить элемент в иерархию классов без перекомпиляции иерархии? Пусть иерархияВнедрение шаблона проектирования посетителей

LandTransport extends Transport 
Car extends LandTransport 

Нам нужно добавить метод GetCapacity иерархии. Как это сделать с помощью шаблона посетителя?

+0

Является ли это домашнее задание? – Fuhrmanator

ответ

0

Ваш интерфейс определен во время компиляции, поэтому он исправлен во время выполнения. Но вы можете добавить функциональность к существующим классам с шаблоном посетителя через полиморфизм времени выполнения.

Просто создайте два интерфейса: один посетитель и второй посетитель, передайте посетителю доступный объект и вычислите логику GetCapacity внутри.

Пример

class myClass; 

class visitor { 
virtual void handle(myClass cl); 

} 

class iVisitable { 
virtual void visit(visitor& v); 
} 



class myClass : public iVisitable{ 
    void visit(visitor& v){ 
    v.handle(this); 
} 
} 

//Put getCapacity logic here and pass it to myClass 
class getCapacityVisitor : iVisitor { } ...