.NET高级面试指南专题十二【 工厂模式介绍,工厂模式和抽象工厂模式的区别】

在这里插入图片描述

工厂模式是一种常用的创建型设计模式,它提供了一种创建对象的最佳方式,同时隐藏了创建对象的复杂性。工厂模式通过定义一个接口或抽象类来创建对象,但是将具体的对象实例化的过程延迟到子类中。这种模式可以根据需要返回子类的实例,而不是直接实例化对象。

原理:
工厂模式包含一个工厂类,该类负责创建其他类的对象。它具有一个方法,该方法根据给定的条件或参数返回不同类的实例。

常用场景:

  • 当一个类不知道它必须创建的对象的类时。
  • 当一个类希望由它的子类来指定创建对象时。
  • 当类将创建对象的职责委托给多个帮助子类中的其中一个,并且希望动态地决定到底使用哪一个时。

优点:

  • 可以隐藏对象的创建细节,使代码更容易维护。
  • 通过引入抽象层,降低了代码的耦合度。
  • 可以更轻松地扩展工厂类以支持新的产品。

缺点:

  • 引入了额外的类,增加了代码的复杂度。
  • 当产品类非常多时,可能会导致工厂类变得庞大且难以维护。

代码示例:

using System;

// 定义抽象产品类
abstract class Vehicle
{
    public abstract void Drive();
}

// 具体产品类
class Car : Vehicle
{
    public override void Drive()
    {
        Console.WriteLine("Driving a car...");
    }
}

// 具体产品类
class Truck : Vehicle
{
    public override void Drive()
    {
        Console.WriteLine("Driving a truck...");
    }
}

// 定义工厂类
class VehicleFactory
{
    public Vehicle GetVehicle(string vehicleType)
    {
        switch (vehicleType.ToLower())
        {
            case "car":
                return new Car();
            case "truck":
                return new Truck();
            default:
                throw new ArgumentException("Invalid vehicle type.");
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        // 使用工厂类创建不同类型的车辆
        VehicleFactory factory = new VehicleFactory();

        Vehicle car = factory.GetVehicle("car");
        car.Drive();

        Vehicle truck = factory.GetVehicle("truck");
        truck.Drive();
    }
}

抽象工厂模式:

抽象工厂模式通过引入一个抽象工厂接口和多个具体工厂类来实现,每个具体工厂类负责创建一组相关的产品,这些产品通常在逻辑上属于同一个产品族或者具有相关特性。

在抽象工厂模式中,客户端通过与具体工厂的接口交互来创建产品,而不是直接实例化具体产品。这样客户端代码与具体产品的实现解耦,使得系统更易于扩展和维护。

代码示例

using System;

// 抽象产品类
abstract class Vehicle
{
    public abstract void Drive();
}

// 具体产品类
class Car : Vehicle
{
    public override void Drive()
    {
        Console.WriteLine("Driving a car...");
    }
}

// 具体产品类
class Truck : Vehicle
{
    public override void Drive()
    {
        Console.WriteLine("Driving a truck...");
    }
}

// 抽象工厂接口
interface IVehicleFactory
{
    Vehicle CreateVehicle();
}

// 具体工厂类 - 生产轿车
class CarFactory : IVehicleFactory
{
    public Vehicle CreateVehicle()
    {
        return new Car();
    }
}

// 具体工厂类 - 生产卡车
class TruckFactory : IVehicleFactory
{
    public Vehicle CreateVehicle()
    {
        return new Truck();
    }
}

class Program
{
    static void Main(string[] args)
    {
        // 使用抽象工厂创建不同类型的车辆
        IVehicleFactory carFactory = new CarFactory();
        Vehicle car = carFactory.CreateVehicle();
        car.Drive();

        IVehicleFactory truckFactory = new TruckFactory();
        Vehicle truck = truckFactory.CreateVehicle();
        truck.Drive();
    }
}

工厂模式和抽象工厂模式的区别

工厂模式和抽象工厂模式都是用于创建对象的设计模式,但它们在设计上有一些重要区别:

目的:

  • 工厂模式的主要目的是创建单个类的实例,它提供了一个统一的接口来创建对象,但是不同的实现类可能会创建不同类型的对象。
  • 抽象工厂模式的目的是创建一系列相关或相互依赖的对象,而不需要指定具体的类。它提供了一个接口,用于创建一组相关的产品,这些产品通常在逻辑上属于同一个产品族或者具有相关特性。

结构:

  • 工厂模式包含一个抽象工厂和多个具体工厂,每个具体工厂负责创建一种具体类型的对象。
  • 抽象工厂模式包含一个抽象工厂和多个具体工厂,每个具体工厂负责创建一组相关的产品,通常涉及多个抽象产品和多个具体产品。

抽象程度:

  • 工厂模式更加灵活,它只关注于创建单个类的实例,具体的实现可以根据需要进行更改。
  • 抽象工厂模式更加抽象,它将一组相关的产品封装在一个工厂中,客户端无需了解产品的具体实现,只需通过工厂来创建产品即可。

使用场景:

  • 工厂模式适用于需要根据条件动态创建单个对象的场景。
  • 抽象工厂模式适用于需要创建一组相关对象的场景,特别是这些对象需要以一种一致的方式进行管理和使用的情况。

总之,工厂模式更注重单一对象的创建,而抽象工厂模式更注重一组相关对象的创建,它们各自的设计目标和使用场景不同。

  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬砖的诗人Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值