oop - 策略与桥梁模式

标签 oop design-patterns strategy-pattern bridge

我知道以前有人问过这个问题(例如 What is the difference between the bridge pattern and the strategy pattern? )。

但是,有人可以使用明确的示例来解释,有什么区别以及在哪种情况下必须选择一个而不是另一个?更少的概念理论,更实际的“现实生活”场景将受到赞赏。

最佳答案

我可以说这很难解释。许多使用它并理解它的人很难向新手解释它。

对于像我这样以类比方式思考的人:

策略模式

所以战略是一种一维的概念。考虑一个可供选择的一维策略数组。

示例 1:管道工的工具

策略模式就像一个管道工,他拥有各种工具来疏通管道。每次工作都是一样的;这是为了疏通管道。但他选择完成这项工作的工具可能会因情况而异。也许他会尝试一个,如果这不起作用,他会尝试另一个。

在这个类比中,“疏通管道”是实现策略之一的方法。 Snake Brush、Power Auger 和 Draino 是具体的策略,而水管工是包含该方法的类(在大多数图中标记为“上下文”)。

enter image description here

示例 2:多头 Screwdriver

或者您可以想到多位 Screwdriver 上的可互换位。
它们旨在在运行时进行更改以适应手头的工作,即搞砸一些东西。

enter image description here

桥接模式

所以桥是一个二维的概念。考虑一维(行)是需要实现的方法列表,第二维(列)是将实现这些方法中的每一个的实现者。

示例 1:应用程序和设备

桥接模式就像一个人可以通过多种方式进行交流(电子邮件、文本、谷歌语音、电话、Skype)和许多可以通过这些方式进行交流的设备——PC、平板电脑和智能手机电话。

各种通信方式(电子邮件、文本、电话)将是抽象接口(interface)上的方法,我们称之为“CommunicationDevice”。在此模式中,CommunicationDevice 是实现者。这个类比中的每个设备(PC、平板电脑、智能手机)都是实现所有这些方法(电子邮件、文本、电话)的 ConcreteImplementor。

enter image description here

示例 2:odbc 数据库驱动程序和 odbc 函数

另一个现成的桥接示例是 Windows 的 odbc 或 oledb 数据库驱动程序模块。它们都在相同的标准“数据库驱动程序”接口(interface)上实现了各种方法,但它们以不同的方式实现该接口(interface)。即使您使用的是同一个数据库,比如 Sql Server,仍然有不同的驱动程序可以与 Sql Server 通信,尽管在幕后以不同的方式。

示例 3:实现者(列)实现方法(行)

Implementors (columns) implementing methods (rows)

关于oop - 策略与桥梁模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5863530/

相关文章:

php - 对象中的Mysql查询

作为 "pure"面向对象语言的 Ruby --- 与 Ruby puts 不一致?

iOS swift : UITapGestureRecognizer and Storyboard

java - 是否有保证 execute(T t) 方法的内置 Java 类型?

c++ - 策略模式与继承

javascript为我的游戏OOP创建一个对象

java - 违反 OO 指导原则

python - 如何将 python 格式字符串与列表中的元素匹配?

java - 在游戏编程项目中,如何处理具有多个实例的多个项目?

vb.net用不同的接口(interface)实现策略模式