关于工厂模式的困惑解决办法

关于工厂模式的困惑
工厂模式通常在工厂类创建产品实例时返回一个产品基类的指针。例如,我有产品基类Base,并由此派生产品子类A、B、C、D;在使用工厂类factory生成产品(A-D)实例的时候会返回Base指针。

问题是,当我获取一个产品(A-D中的一种)的指针Base*时,需要使用产品子类的自有方法,这就需要将Base*指针进行向下类型转换,可问题是我本身又不知道这个产品是那种子类。当然我可以在子类中标示子类的产品类型,在需要进行向下转换时据子类类型进行转化,可这肯定不是一个好的方法。

诸位前辈、高人能否指点一下?谢了。

------解决方案--------------------
类似这样的:
// Usage: --------------------

Base* pBase = Factory.Create(typeA);
BaseVisitor* pVisitor = Factory.Create(typeFunA);

// Call FunA()
pBase->Accept(pVisitor);

// Implementation: --------------------

class DerivedA : public Base // DerivedA contains FunA();
class DerivedB : public Base // DerivedB contains FunB();

class FunAVisitor : public BaseVisitor
class FunBVisitor : public BaseVisitor

Base::Accept(BaseVisitor* pBaseVisitor)
{
}

// Overload Base's Accept()
DerivedA::Accept(BaseVisitor* pBaseVisitor)
{
pBaseVisitor->Visit((DerivedA*)this);
}

DerivedB::Accept(BaseVisitor* pBaseVisitor)
{
pBaseVisitor->Visit((DerivedB*)this);
}

// Visitor
BaseVisitor::Visit(Base* pBase)
{
}
BaseVisitor::Visit(DerivedA* pA)
{
}
BaseVisitor::Visit(DerivedB* pB)
{
}

// Overload Base's Visit()
FunAVisitor::Visit(DerivedA* pA)
{
 pA->FunA();
}

FunBVisitor::Visit(DerivedB* pB)
{
 pB->FunB();
}