名称:抽象工厂模式
动机:别管这钱怎么来的(有美元和欧元),给你就用就行了
适用性:
参与者:
结果:和工厂方法类似,属于工厂方法的升级版本,唯一的改变是抽象工厂对产品作了进一步的细分
类图:
说明:允许客户使用抽象的接口来创建一组相关的产品,而不需要知道实际产出的产品是什么,从而实现客户与产品的解耦。
code C#:
namespace abstractFactory {
class Program {
static void Main(string[] args) {
iFactory factory = new factory();
iProduct1 p1a = factory.createProduct1("A");
iProduct2 p2b = factory.createProduct2("B");
p1a.showProduct1Desc();
p2b.showProduct2Desc();
Console.Read();
}
}
// main code
interface iProduct1 {
void showProduct1Desc();
}
interface iProduct2 {
void showProduct2Desc();
}
class product1_A : iProduct1 {
public void showProduct1Desc() {
Console.WriteLine("this is product1_A");
}
}
class product1_B : iProduct1 {
public void showProduct1Desc() {
Console.WriteLine("this is product1_B");
}
}
class product2_A : iProduct2 {
public void showProduct2Desc() {
Console.WriteLine("this is product2_A");
}
}
class product2_B : iProduct2 {
public void showProduct2Desc() {
Console.WriteLine("this is product2_B");
}
}
interface iFactory {
iProduct1 createProduct1(string type);
iProduct2 createProduct2(string type);
}
class factory : iFactory {
public iProduct1 createProduct1(string type) {
switch (type) {
case "A":
return new product1_A();
case "B":
return new product1_B();
default:
return null;
}
}
public iProduct2 createProduct2(string type) {
switch (type) {
case "A":
return new product2_A();
case "B":
return new product2_B();
default:
return null;
}
}
}
}