2017-05-11 15 views
6

今日、私のジレンマは、ストラテジーとブリッジパターンの実装方法が重複している理由を理解しようとすることから発生します。ここでデザインパターン - ストラテジーとブリッジ(オーバーラップデザイン)

は今ここにブリッジパターン(抽象化の実装を抽象化)

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

あるStrategyパターンである - クラスの動作やそのアルゴリズムは、実行時に変更することができます。電卓は、これらのパターンの両方が機能をカプセル化戦略オブジェクトを破棄伴う戦略

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

にその業務を委任します。 Bridge Pattern(構造)とStrategy Pattern(行動)の明確な違いを助けてください。私が持っている別の混乱は、彼らが知識の異なる傘の下にあることです。

+1

[戦略対ブリッジパターン]の可能な複製(http://stackoverflow.com/questions/5863530/strategy-vs-bridge-patterns) –

+1

http://stackoverflow.com/questions/5863530/strategy-vs -bridge-patterns、http://stackoverflow.com/questions/464524/what-is-the-difference-between-the-bridge-pattern-and-strategy-pattern – Andrew

+0

戦略は行動パターンであり、ブリッジは構造パターンです。 http://stackoverflow.com/questions/464524/what-is-the-difference-between-the-bridge-pattern-and-strategy-pattern –

答えて

1

Strategy Patternでは、後でコアアルゴリズムを変更できると述べています。つまり、電子商取引アプリケーションをコード化し、B2BおよびB2Cのお客様がいる場合、支払い方法と注文方法が異なります。次に、チェックアウト戦略に戦略パターンを使用します。つまり、基本的なアクションは同じですが、2人のユーザーはそれを達成するためにさまざまな方法(戦略)を使用します。対照的にブリッジパターンでは、2つのモジュール間にブリッジを構築し、これらのモジュールを個別に変更することができます。これは抽象化と情報隠蔽を対象としています。

3

あなたの例では、これらの2つのパターンが少し重なっています。

最初のケースでは、ブリッジパターンは、抽象化をその実装から切り離して、2つが独立して変化する必要がある場合に使用されます。 これだけですが、実装を抽象化しています。

ストラテジーでは、クラスの動作を実行時に変更することができます。具体的なストラテジークラスでは、ブリッジパターンを実装することもできます。クラスを使用していて、それをデタプルしたいと思うかもしれません。

0

このブリッジは、コンポーネントをカプセル化し、他のインターフェイスを公開するために使用されます。通常は、管理していないライフサイクルを持つコンポーネントを使用しているときにブリッジを使用します。ブリッジの実装に対するソフトウェアの依存性を制限します。

ストラテジパターンは、特定の操作を実行するアルゴリズムが異なる場合に使用され、切り替えることはできません。

関連する問題