C#面试题(中级篇),详细讲解,帮助你深刻理解,拒绝背话术!-优快云博客
简单工厂模式
优点:
根据条件有工厂类直接创建具体的产品
客户端无需知道具体的对象名字,可以通过配置文件创建,灵活。
缺点:
每增加一个对象,就需要在工厂添加新的产品,修改工厂逻辑,不易拓展
using System;
// 定义产品的抽象基类
public abstract class Product
{
public abstract void Use();
}
// 具体产品类A
public class ConcreteProductA : Product
{
public override void Use()
{
Console.WriteLine("Using ConcreteProductA");
}
}
// 具体产品类B
public class ConcreteProductB : Product
{
public override void Use()
{
Console.WriteLine("Using ConcreteProductB");
}
}
// 简单工厂类
public class SimpleFactory
{
public static Product CreateProduct(string type)
{
switch (type)
{
case "A":
return new ConcreteProductA();
case "B":
return new ConcreteProductB();
default:
throw new ArgumentException("Invalid product type");
}
}
}
class Program
{
static void Main()
{
Product productA = SimpleFactory.CreateProduct("A");
productA.Use();
Product productB = SimpleFactory.CreateProduct("B");
productB.Use();
}
}
工厂方法模式
解决了简单工厂的 开放-关闭原则
不同的子类由工厂子类创建
但是对象数量会很多
抽象工厂
抽象工厂:(相当于有多个工厂)不同厂商生产的同一产品,产品拥有相同的结构,区别在于不同的厂商和动作的细节。比如多个电脑工厂,生产不同品牌的电脑,电脑有多个配件,每个工厂都生产这些配件()。
抽象工厂有产品,继承的工厂生产对应厂商的产品。
using System;
// 定义产品A的抽象基类
public abstract class AbstractProductA
{
public abstract void UseA();
}
// 具体产品A1
public class ConcreteProductA1 : AbstractProductA
{
public override void UseA()
{
Console.WriteLine("Using ConcreteProductA1");
}
}
// 具体产品A2
public class ConcreteProductA2 : AbstractProductA
{
public override void UseA()
{
Console.WriteLine("Using ConcreteProductA2");
}
}
// 定义产品B的抽象基类
public abstract class AbstractProductB
{
public abstract void UseB();
}
// 具体产品B1
public class ConcreteProd