名称:抽象工厂模式
意图:提供一个创建一系列相关的或相互依赖对象的接口,而无需指定它们具体的类。
适用环境:
1、一个系统要独立它的产品的创建、组合和表示时
2、一个系统要由多个产品系列中的一个来配置时。
3、当你要强调一系列相关的产品对象的设计以便进行联合使用时。
4、当你提供一个产品类库,而只想显示它们的接口而不是实现时。
abstractclassAbstraactFactory
{
publicabstractAbstractProductACreateProductA();
publicabstractAbstractProductBCreateProductB();
}
classConcreteFactory1: AbstraactFactory
{
publicoverrideAbstractProductACreateProductA()
{
returnnewProudctA1();
}
publicoverrideAbstractProductBCreateProductB()
{
returnnewProductB1();
}
}
classConcreteFactory2: AbstraactFactory
{
publicoverrideAbstractProductACreateProductA()
{
returnnewProductA2();
}
publicoverrideAbstractProductBCreateProductB()
{
returnnewProductB2();
}
}
abstractclassAbstractProductA
{
}
abstractclassAbstractProductB
{
publicabstractvoidInteract(AbstractProductAa);
}
classProudctA1: AbstractProductA
{
}
classProductB1: AbstractProductB
{
publicoverridevoidInteract(AbstractProductAa)
{
Console.WriteLine(this.GetType().Name +
" interacts with "+ a.GetType().Name);
}
}
classProductA2: AbstractProductA
{
}
classProductB2: AbstractProductB
{
publicoverridevoidInteract(AbstractProductAa)
{
Console.WriteLine(this.GetType().Name +
" interacts with "+ a.GetType().Name);
}
}
classClient
{
privateAbstractProductA_abstractProductA;
privateAbstractProductB_abstractProductB;
publicClient(AbstraactFactoryfactory)
{
_abstractProductB = factory.CreateProductB();
_abstractProductA = factory.CreateProductA();
}
publicvoidRun()
{
_abstractProductB.Interact(_abstractProductA);
}
}
调用:
AbstraactFactoryfactory1 = newConcreteFactory1();
Clientclient1 = newClient(factory1);
client1.Run();
AbstraactFactoryfactory2 = newConcreteFactory2();
Clientclient2 = newClient(factory2);
client2.Run();
输出:
ProductB1 interacts with ProudctA1
ProductB2 interacts with ProductA2