Design patterns MVC模型和桥梁设计模式之间有联系吗?

Design patterns MVC模型和桥梁设计模式之间有联系吗?,design-patterns,model-view-controller,Design Patterns,Model View Controller,我试着研究桥的设计模式,在网上偶然发现了各种各样的答案。最终,我想我掌握了窍门。如果我在这方面有错误,请随时纠正我,但我可以使用桥接模式将特定数据与如何呈现特定数据分离 当我了解到这一点时,我突然意识到我已经熟悉了一些相同性质的东西,MVC模型,其中声明我们有一个模型(数据)、一个视图(要呈现的UI)和一个查询模型以支持视图的控制器 那么,这两件事之间是否存在关联,或者只是我对桥接模式感到困惑?如果有更多关于桥接模式的内容,请告诉我。桥接是一种通用模式,扩展了我们通常实现多态性的方式。 例如,考

我试着研究桥的设计模式,在网上偶然发现了各种各样的答案。最终,我想我掌握了窍门。如果我在这方面有错误,请随时纠正我,但我可以使用桥接模式将特定数据与如何呈现特定数据分离

当我了解到这一点时,我突然意识到我已经熟悉了一些相同性质的东西,MVC模型,其中声明我们有一个模型(数据)、一个视图(要呈现的UI)和一个查询模型以支持视图的控制器


那么,这两件事之间是否存在关联,或者只是我对桥接模式感到困惑?如果有更多关于桥接模式的内容,请告诉我。

桥接是一种通用模式,扩展了我们通常实现多态性的方式。 例如,考虑绘制形状的典范例子。

Abstract Class Shape(
    abstract function draw();
)

Class Circle extends Shape(
    draw(){ /*draw a circle*/}
)

Class Square extends Shape(
    draw(){ /*draw a square*/}
)
现在,我们可以创建一个形状数组(正方形和圆形的协同显示),并告诉数组中的每个对象在每个元素上使用shape->draw()进行自身绘制。(所有伪代码)

现在假设在不同的系统上绘制圆和正方形的方式不同。我们可以添加新的抽象draw()函数,如drawWindows()和drawXwin()以及相应的实现

或者,我们可以在实现drawAPI的对象中使用桥接和传递(并且我们可以有许多不同绘制方式的具体子类)

Abstract Class Shape(
    protected drawAPI;         // object that implements drawAPI

    abstract function draw();

    Shape( drawAPIin){  // constructor
     drawAPI =  drawAPIin;
    }
)

Class Circle extends Shape(

    draw(){ drawAPI->draw();}
)

Class Square extends Shape(
    draw(){ drawAPI->draw();}
)
现在,我们仍然可以创建一个形状数组(正方形和圆形的协同显示),并告诉数组中的每个对象在每个元素上使用shape->draw()绘制自己,但这次将根据传递给shape构造函数的drawAPI对象的draw()绘制()(获取?:-)。无论如何,这是一种非常灵活的方法

将其与MVC联系起来,MVC是一种专门的模式,最常用于分离数据存储/检索(模型的功能)、数据显示和用户输入(视图的功能)以及在模型和视图(控制器的功能)之间编组数据。MVC模式有几种变体,可以在各种前端和后端web开发框架中看到

正如您所看到的,桥接模式和MVC的意图是完全不同的,尽管正如您所指出的,可能存在重叠点。虽然将它们视为同一模式的不同名称可能不是完全正确的,但正如你们所指出的那样,它们的连接方式与大多数GOF模式重叠并以多种方式连接。


当我们在思考问题时提高抽象级别时,想法和解决方案似乎经常合并并看起来相似。但魔鬼和回报在于细节,一个好的起点是仔细观察每个模式的意图,了解它们的差异。

模型视图控制器主要是分离关注点的练习。“桥接模式”是另一种模式,主要与在运行时指定执行有关。看到和