public class Factory
{
public virtual void Free()
{
Console.WriteLine("Factory.Free");
}
public virtual void Init()
{
Console.WriteLine("Factory.Init");
}
public virtual void Execute()
{
Console.WriteLine("Factory.Execute");
}
}
public class Factory1:Factory
{
public override void Free()
{
base.Free();
Console.WriteLine("Factory1.Free");
}
public override void Init()
{
base.Init();
Console.WriteLine("Factory1.Init");
}
}
public class Factory2:Factory
{
public override void Free()
{
base.Free();
Console.WriteLine("Factory2.Free");
}
public override void Init()
{
base.Init();
Console.WriteLine("Factory2.Init");
}
}
public class Server
{
public void FreeServer()
{
Manager.ForeachFactory(this,new Manager.FacotryPro(FactoryFree));
}
public void InitServer()
{
Manager.ForeachFactory(this,new Manager.FacotryPro(FactoryInit));
}
public void Execute()
{
Manager.ForeachFactory(this,new Manager.FacotryPro(FactoryExecte));
}
protected void FactoryExecte(Factory factory)
{
factory.Execute();
}
protected void FactoryFree(Factory factory)
{
factory.Free();
}
protected void FactoryInit(Factory factory)
{
factory.Init();
}
}
public class Manager
{
public delegate void FacotryPro(Factory factory);
public static Factory[] GetFactories(){return new Factory[]{new Factory1(),new Factory2()};}
public static void ForeachFactory(Server server,FacotryPro factoryPro)
{
Factory[] factories = GetFactories();
foreach(Factory factory in factories)
{
factoryPro(factory);
}
}
}
class Application
{
[STAThread]
static void Main(string[] args)
{
Server curServer = new Server();
Console.WriteLine("begin server init...");
curServer.InitServer();
Console.WriteLine("execute...");
curServer.Execute();
Console.WriteLine("begin server free...");
curServer.FreeServer();
Console.Read();
}
}
//输出效果