套装由同颜色的上衣和裤子组成,假设白色套装工厂生产白色上衣和白色裤子,黑色套装工厂生产黑色上衣和黑色裤子。在工厂内部生产同颜色的上衣和裤子,想制作白色套装,只需要创建一个白色套装工厂,想制作黑色套装,只需要创建一个黑色套装工厂,下面用代码实现。
public static void Main()
{
//白色套装工厂
AbstractSuiteFactory whiteFactory = new ConcreteWhiteSuiteFactory();
Client client1 = new Client(whiteFactory);
client1.Run();
//黑色套装工厂
AbstractSuiteFactory blackFactory = new ConcreteBlackSuiteFactory();
Client client2 = new Client(blackFactory);
client2.Run();
Console.ReadKey();
}
}
//抽象套装工厂
abstract class AbstractSuiteFactory
{
//上衣
public abstract AbstractCoat CreateCoat();
//裤子
public abstract AbstractTrouses CreateTrouses();
}
//具体的,白色套装工厂
class ConcreteWhiteSuiteFactory : AbstractSuiteFactory
{
//制作白色上衣
public override AbstractCoat CreateCoat()
{
return new WhiteCoat();
}
//制作白色裤子
public override AbstractTrouses CreateTrouses()
{
return new WhiteTrouses();
}
}
//黑色套装工厂
class ConcreteBlackSuiteFactory : AbstractSuiteFactory
{
//制作黑色上衣
public override AbstractCoat CreateCoat()
{
return new BlackCoat();
}
//制作黑色裤子
public override AbstractTrouses CreateTrouses()
{
return new BlackTrouses();
}
}
//抽象上衣
abstract class AbstractCoat
{
}
//抽象裤子
abstract class AbstractTrouses
{ //将上衣和裤子搭配成一套
public abstract void Interact(AbstractCoat a);
}
//具体的白色上衣
class WhiteCoat : AbstractCoat
{
}
//具体的白色裤子
class WhiteTrouses : AbstractTrouses
//搭配上衣和裤子
{ public override void Interact(AbstractCoat a)
{
Console.WriteLine(this.GetType().Name +" interacts with " + a.GetType().Name);
}
}
//具体的黑色上衣
class BlackCoat : AbstractCoat
{
}
//具体的黑色裤子
class BlackTrouses : AbstractTrouses
{
//搭配上衣和裤子
public override void Interact(AbstractCoat a)
{
Console.WriteLine(this.GetType().Name + " interacts with " + a.GetType().Name);
}
}
class Client //在这个类中,其实又用到了工厂方法。
{
//客户类:构造抽象工厂,生产抽象产品。实例化在具体应用时。
private AbstractCoat _abstractCoat;
private AbstractTrouses _abstractTrouses;
// Constructor
public Client(AbstractSuiteFactory factory)
{
_abstractTrouses = factory.CreateTrouses();
_abstractCoat = factory.CreateCoat();
}
public void Run()
{
_abstractTrouses.Interact(_abstractCoat);
}
执行结果:
WhiteTrouses interacts with WhiteCoat
BlackTrouses interacts with BlackCoat
没有评论:
发表评论