【问题标题】:Design pattern - Strategy and Bridge (Overlap in design)设计模式 - 策略与桥梁(设计中的重叠)
【发布时间】:2017-10-10 04:12:23
【问题描述】:

今天,我的困境源于试图理解为什么在实施策略和桥接模式方面存在重叠。

这是桥接模式(从抽象中抽象出一个实现)

// 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);
  }
}

这两种模式都涉及丢弃封装功能的策略对象。请帮助明确桥梁模式(结构)和策略模式(行为)之间的区别。我遇到的另一个困惑是它们处于不同的知识范围内。

【问题讨论】:

标签: java oop design-patterns


【解决方案1】:

策略模式说你可以在以后更改核心算法。例如,当您编写电子商务应用程序并且您拥有 B2B 和 B2C 客户时,它们具有不同的付款和订购方式。然后,您将使用策略模式作为结帐策略。所以基本动作是相同的,但是两个用户使用不同的方式(策略)来完成它。相比之下,桥接模式表示您在两个模块之间建立了一座桥梁,并且您可以独立更改这些模块。这是针对抽象和信息隐藏。

【讨论】:

    【解决方案2】:

    在您的示例中,我看到这两种模式之间有些重叠。

    在第一种情况下,当我们需要将抽象与其实现分离时使用桥接模式,以便两者可以独立变化。 就是这样,您只是在抽象实现。

    在第二种情况下,策略类的行为可以在运行时改变。这也意味着在一个具体的 Strategy 类中你也可以实现一个 Bridge 模式,也许你正在使用一个类并且想要对它进行 decuple。

    【讨论】:

      【解决方案3】:

      桥用于封装组件并暴露其他接口。当您使用具有您无法控制的生命周期的组件时,您通常会使用桥接器。它限制了您的软件对桥的实现的依赖。

      当您有不同的可能算法来执行某项操作,并且您不想保留从一个切换到另一个的能力时,使用策略模式。

      【讨论】:

        猜你喜欢
        • 2011-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多