抽象工厂设计模式
Client Invoke
protected void btnAbstract_Click(object sender, EventArgs e)
{
AbstractRoadFactory roadfactory ;
roadfactory = new RoadFactory1();
client c1 ;
c1 = new client(roadfactory);
lblMessage.Text += c1.Run() + "--";
roadfactory = new RoadFactory2();
c1 = new client(roadfactory);
lblMessage.Text += c1.Run() + "--";
}
Class Demo
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
/// <summary>
/// Summary description for AbstractClass
/// </summary>
public abstract class AbstractRoadFactory
{
public AbstractRoadFactory()
{
//
// TODO: Add constructor logic here
//
}
public abstract AbstractWhiteRoad CreateWhiteRoad();
public abstract AbstractBlackRoad CreateBlackRoad();
}
public class RoadFactory1 : AbstractRoadFactory
{
public override AbstractWhiteRoad CreateWhiteRoad()
{
return new WhiteRoad1();
}
public override AbstractBlackRoad CreateBlackRoad()
{
return new BlackRoad1();
}
}
public class RoadFactory2 : AbstractRoadFactory
{
public override AbstractWhiteRoad CreateWhiteRoad()
{
return new WhiteRoad2();
}
public override AbstractBlackRoad CreateBlackRoad()
{
return new BlackRoad2();
}
}
public abstract class AbstractWhiteRoad
{
}
public abstract class AbstractBlackRoad
{
public abstract string Run();
}
public class WhiteRoad1 : AbstractWhiteRoad
{
}
public class BlackRoad1 : AbstractBlackRoad
{
public override string Run() {
return "test black road1!";
}
}
public class WhiteRoad2 : AbstractWhiteRoad
{
}
public class BlackRoad2 : AbstractBlackRoad
{
public override string Run()
{
return "test black road2!";
}
}
public class client
{
private AbstractWhiteRoad AbstractWhiteRoad;
private AbstractBlackRoad AbstractBlackRoad;
public client(AbstractRoadFactory factory)
{
AbstractWhiteRoad = factory.CreateWhiteRoad();
AbstractBlackRoad = factory.CreateBlackRoad();
}
public string Run()
{
return AbstractBlackRoad.Run();
}
}