c# 抽象工厂模式demo
时间: 2023-07-14 12:08:30 浏览: 127
好的,这里是一个简单的 C# 抽象工厂模式的示例:
```csharp
// 抽象产品A
interface IProductA {
void MethodA();
}
// 抽象产品B
interface IProductB {
void MethodB();
}
// 具体产品A1
class ConcreteProductA1 : IProductA {
public void MethodA() {
Console.WriteLine("具体产品A1的方法A");
}
}
// 具体产品A2
class ConcreteProductA2 : IProductA {
public void MethodA() {
Console.WriteLine("具体产品A2的方法A");
}
}
// 具体产品B1
class ConcreteProductB1 : IProductB {
public void MethodB() {
Console.WriteLine("具体产品B1的方法B");
}
}
// 具体产品B2
class ConcreteProductB2 : IProductB {
public void MethodB() {
Console.WriteLine("具体产品B2的方法B");
}
}
// 抽象工厂
interface IAbstractFactory {
IProductA CreateProductA();
IProductB CreateProductB();
}
// 具体工厂1
class ConcreteFactory1 : IAbstractFactory {
public IProductA CreateProductA() {
return new ConcreteProductA1();
}
public IProductB CreateProductB() {
return new ConcreteProductB1();
}
}
// 具体工厂2
class ConcreteFactory2 : IAbstractFactory {
public IProductA CreateProductA() {
return new ConcreteProductA2();
}
public IProductB CreateProductB() {
return new ConcreteProductB2();
}
}
// 客户端代码
class Client {
static void Main(string[] args) {
// 创建工厂1
IAbstractFactory factory1 = new ConcreteFactory1();
// 创建产品A1
IProductA productA1 = factory1.CreateProductA();
// 创建产品B1
IProductB productB1 = factory1.CreateProductB();
// 调用产品A1的方法A
productA1.MethodA();
// 调用产品B1的方法B
productB1.MethodB();
// 创建工厂2
IAbstractFactory factory2 = new ConcreteFactory2();
// 创建产品A2
IProductA productA2 = factory2.CreateProductA();
// 创建产品B2
IProductB productB2 = factory2.CreateProductB();
// 调用产品A2的方法A
productA2.MethodA();
// 调用产品B2的方法B
productB2.MethodB();
}
}
```
这个示例中,抽象产品A和B表示两个不同的产品族,具体产品A1和A2表示A产品族的两个具体产品,具体产品B1和B2表示B产品族的两个具体产品。抽象工厂接口定义了两个工厂方法,用于创建A和B产品族的产品。具体工厂1和2分别实现了抽象工厂接口,用于创建A和B产品族的具体产品。客户端通过具体工厂1或者2来创建A和B产品族的具体产品,实现了产品族的解耦。
阅读全文