You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

代码实例模式辨析:Bridge Pattern与Strategy Pattern如何区分?

这段代码属于策略模式(Strategy Pattern),而非桥接模式(Bridge Pattern)

为什么是策略模式?

这段代码的核心是把驾驶行为(Drive)封装成独立的策略类(NormalDriveStrategy、SportsDriveStrategy),Vehicle类通过依赖注入持有不同的策略实例,子类(GoodsVehicle、SportVehicle等)在初始化时选择对应的驾驶策略。策略模式的本质就是让行为可以独立于使用它的对象灵活替换,这里完全符合这个意图——不同车辆只是切换驾驶行为的实现,没有对车辆本身的核心抽象和另一个维度的实现做分离。

为什么不是桥接模式?

桥接模式的核心是分离抽象层和实现层,让两者可以各自独立扩展,它解决的是多维度变化的问题:

  • 抽象层要有自己的层级(比如不同类型的Vehicle:Car、Truck)
  • 实现层也要有自己的层级(比如不同的动力系统:FuelEngine、ElectricEngine)
  • 抽象层依赖实现层的接口,两者都能独立新增子类,互不影响

而你的代码里,只有**行为(驾驶策略)**这一个可变维度,没有另一个独立的实现层级。IDriveStrategy只是Vehicle的一个行为,不是Vehicle的“实现”维度——桥接模式里的实现层是用来完成抽象层核心功能的,而非单纯的行为替换。比如如果再加一个IPowerSystem接口(燃油、电动),Vehicle同时依赖IDriveStrategy和IPowerSystem,那才可能用到桥接模式。

简单总结:策略模式管单一行为的灵活替换,桥接模式管多维度的抽象与实现分离扩展。


原始代码示例

public interface IDriveStrategy
{
    void Drive();
}

public class NormalDriveStrategy : IDriveStrategy
{
    public void Drive(){    }
}

public class SportsDriveStrategy : IDriveStrategy
{
    public void Drive(){    }
}

public class Vehicle
{
    private readonly IDriveStrategy _driveStrategy;
    public Vehicle(IDriveStrategy driveStrategy)
    {
        _driveStrategy = driveStrategy;
    }
    public void Engine(){   }
    public void Display(){  }
    public void PerformDrive()
    {
        _driveStrategy.Drive();
    }
}

public class GoodsVehicle : Vehicle
{
    public GoodsVehicle() : base(new NormalDriveStrategy())
    {
    }
}

public class SportVehicle : Vehicle
{
    public SportVehicle() : base(new SportsDriveStrategy())
    {
    }
}

public class OffRoadVehicle : Vehicle
{
    public OffRoadVehicle() : base(new SportsDriveStrategy())
    { 
    }
}

内容的提问来源于stack exchange,提问作者rohan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 09:15:12