今天我的困境来自于试图理解为什么战略和桥梁模式的实施方式存在重叠。
这是Bridge Pattern(从抽象中抽象出一个实现)
// Shapes object structure will not be concerned how they draw themselves
public abstract class Shape {
protected DrawAPI drawAPI;
protected Shape(DrawAPI drawAPI){
this.drawAPI = drawAPI;
}
// This could also be put in the subcla
public void draw() {
drawAPI.drawCircle(radius,x,y);
}
}
现在这里是策略模式 - 可以在运行时更改类行为或其算法。计算器会将其操作委托给策略
public class Calculator{
private Strategy strategy;
public Calculator(Strategy strategy){
this.strategy = strategy;
}
public int executeStrategy(int num1, int num2){
return strategy.doOperation(num1, num2);
}
}
这两种模式都涉及丢弃封装功能的策略对象。请帮助解决桥梁模式(结构)和战略模式(行为)之间的明显差异。我遇到的另一个困惑是他们处于不同的知识范围内。
答案 0 :(得分:3)
在你的例子中,我看到这两种模式之间有一些重叠。
在第一种情况下,当我们需要将抽象与其实现分离时,使用Bridge模式,以便两者可以独立变化。 这就是全部,你只是抽象实现。
在第二种情况下,策略可以在运行时更改类行为。这也意味着进入一个具体的策略类你也可以实现一个Bridge模式,也许你正在使用一个类并想要对它进行解释。
答案 1 :(得分:1)
策略模式表示您可以稍后更改核心算法。因此,当您对电子商务应用程序进行编码并且您拥有B2B和B2C客户时,它们具有不同的付款和订购方法。然后,您将使用策略模式进行结账策略。所以基本动作是相同的,但是两个用户使用不同的方式(策略)来实现这一点。相比之下,桥接模式表示您在两个模块之间构建桥梁,您可以单独更改这些模块。这是针对抽象和信息隐藏。
答案 2 :(得分:0)
网桥用于封装组件并暴露其他一些接口。当您使用具有您无法控制的生命周期的组件时,通常会使用桥接器。它限制了软件对桥接器实现的依赖性。
当您使用不同的算法执行某项操作时,会使用策略模式,并且您不能保持从一种操作切换到另一种操作的能力。