我知道以前有人问过这个问题(例如 What is the difference between the bridge pattern and the strategy pattern? )。
但是,有人可以使用明确的示例来解释,有什么区别以及在哪种情况下必须选择一个而不是另一个?更少的概念理论,更实际的“现实生活”场景将受到赞赏。
最佳答案
我可以说这很难解释。许多使用它并理解它的人很难向新手解释它。
对于像我这样以类比方式思考的人:
策略模式
所以战略是一种一维的概念。考虑一个可供选择的一维策略数组。
示例 1:管道工的工具
策略模式就像一个管道工,他拥有各种工具来疏通管道。每次工作都是一样的;这是为了疏通管道。但他选择完成这项工作的工具可能会因情况而异。也许他会尝试一个,如果这不起作用,他会尝试另一个。
在这个类比中,“疏通管道”是实现策略之一的方法。 Snake Brush、Power Auger 和 Draino 是具体的策略,而水管工是包含该方法的类(在大多数图中标记为“上下文”)。
示例 2:多头 Screwdriver
或者您可以想到多位 Screwdriver 上的可互换位。
它们旨在在运行时进行更改以适应手头的工作,即搞砸一些东西。
桥接模式
所以桥是一个二维的概念。考虑一维(行)是需要实现的方法列表,第二维(列)是将实现这些方法中的每一个的实现者。
示例 1:应用程序和设备
桥接模式就像一个人可以通过多种方式进行交流(电子邮件、文本、谷歌语音、电话、Skype)和许多可以通过这些方式进行交流的设备——PC、平板电脑和智能手机电话。
各种通信方式(电子邮件、文本、电话)将是抽象接口(interface)上的方法,我们称之为“CommunicationDevice”。在此模式中,CommunicationDevice 是实现者。这个类比中的每个设备(PC、平板电脑、智能手机)都是实现所有这些方法(电子邮件、文本、电话)的 ConcreteImplementor。
示例 2:odbc 数据库驱动程序和 odbc 函数
另一个现成的桥接示例是 Windows 的 odbc 或 oledb 数据库驱动程序模块。它们都在相同的标准“数据库驱动程序”接口(interface)上实现了各种方法,但它们以不同的方式实现该接口(interface)。即使您使用的是同一个数据库,比如 Sql Server,仍然有不同的驱动程序可以与 Sql Server 通信,尽管在幕后以不同的方式。
示例 3:实现者(列)实现方法(行)
关于oop - 策略与桥梁模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5863530/