У меня небольшая проблема с дизайном: у меня есть одна фабрика, которая будет создавать объекты того или иного типа. Но мое клиентское требование состоит в том, чтобы предоставить (подавать) данные (через методы установки) из внешнего мира в конкретный класс типа 1, а не для типа 2.
Если я размещаю эти методы установки в интерфейсе, их необходимо принудительно реализовать для обоих конкретных классов. Это НЕ мое требование. Я хочу передать 1 тип данных для 1-го типа (некоторые сеттеры) и хочу предоставить другой тип данных для другого типа (возможно, разные сеттеры, отличные от тех, которые содержатся в предыдущем типе.)
e.g
class ISubjectExecutor
{
public:
virtual void ISUBJECTEXECUTOR_EXPORTS_API Execute()=0;
};
class COMExecutor: public ISubjectExecutor
{
public:
virtual void Execute()=0;
void setCLSID();
void setGuids();
};
class Win32Executor : public IWin32Executor
{
public:
virtual void Execute()=0;
void setFilePath();
};
Теперь здесь я не могу использовать указатель ISubjectExecutor (*pSubjectExecutor) для вызова методов установки Win32Executor или COMExecutor по моему выбору в любое время после получения указателя (ISubjectExecutor) с завода. Потому что эти все сеттеры никогда не существуют внутри интерфейса ISubjectExecutor, и вы не можете получить доступ ни к одному методу, который никогда не содержался внутри интерфейса и существовал в конкретной реализации.
Как решить эту проблему дизайна, чтобы решить.?
С уважением Хасан
setCLSID()/setGuids()
илиsetFilePath()
для объекта, возвращенного фабрикой, то он уже знает конкретный тип объекта, поэтому он может просто преобразовать указатель вCOMExecutor
(если первый) илиWin32Executor
(если последнее). В этом случае на самом деле нет смысла использовать фабрику (или, по крайней мере, нет конструктивного преимущества). - person j_random_hacker   schedule 09.12.2010