抽象工厂设计模式

抽象工厂设计模式

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();
    }
}
原文地址:https://www.cnblogs.com/zhangchenliang/p/2142868.html