class Program
{
static void Main(string[] args)
{
var objlist = new List<IElement>
{
new TcsDesignation(),
new WiproLocation(),
new InfoPackage(),
new InfoDesignation(),
new TcsLocation(),
new TcsPackage()
};
ITCompanyVisitor visitor = new ITCompanyVisitor();
foreach (IElement ieleElement in objlist)
{
ieleElement.Accept(visitor);
}
}
}
abstract class Visitor
{
public abstract void GetLocation(TcsLocation location);
public abstract void GetLocation(WiproLocation location);
public abstract void GetLocation(InfoLocation location);
public abstract void GetPackage(TcsPackage package);
public abstract void GetPackage(WiproPackage package);
public abstract void GetPackage(InfoPackage package);
public abstract void GetDesignation(TcsDesignation designation);
public abstract void GetDesignation(WiproDesignation designation);
public abstract void GetDesignation(InfoDesignation designation);
}
class ITCompanyVisitor : Visitor
{
void GetLocation(TcsLocation location)
{
}
void GetLocation(WiproLocation location)
{
}
void GetLocation(InfoLocation location)
{
}
void GetPackage(TcsPackage package)
{
}
void GetPackage(WiproPackage package)
{
}
void GetPackage(InfoPackage package)
{
}
void GetDesignation(TcsDesignation designation)
{
}
void GetDesignation(WiproDesignation designation)
{
}
void GetDesignation(InfoDesignation designation)
{
}
}
interface IElement
{
void Accept(Visitor visitor);
}
class TcsLocation : IElement
{
public void Accept(Visitor visitor)
{
visitor.GetLocation(this);
}
}
class TcsPackage : IElement
{
public void Accept(Visitor visitor)
{
visitor.GetPackage(this);
}
}
class TcsDesignation : IElement
{
public void Accept(Visitor visitor)
{
visitor.GetDesignation(this);
}
}
class WiproLocation : IElement
{
public void Accept(Visitor visitor)
{
visitor.GetLocation(this);
}
}
class WiproPackage : IElement
{
public void Accept(Visitor visitor)
{
visitor.GetPackage(this);
}
}
class WiproDesignation : IElement
{
public void Accept(Visitor visitor)
{
visitor.GetDesignation(this);
}
}
class InfoLocation : IElement
{
public void Accept(Visitor visitor)
{
visitor.GetLocation(this);
}
}
class InfoPackage : IElement
{
public void Accept(Visitor visitor)
{
visitor.GetPackage(this);
}
}
class InfoDesignation : IElement
{
public void Accept(Visitor visitor)
{
visitor.GetDesignation(this);
}
}
}