2017-05-11 89 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); 
    } 
} 

現在這裏是戰略格局 - 一類的行爲或它的算法可以在運行時更改。計算器將其操作委託給策略

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模式(結構)和策略模式(行爲)之間的明顯差異。我遇到的另一個困惑是他們在不同的知識雨傘下。

+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-the-strategy-pattern – Andrew

+0

策略是行爲模式,Bridge是結構模式。看看http://stackoverflow.com/questions/464524/what-is-the-difference-between-the-bridge-pattern-and-the-strategy-pattern –

回答

1

策略模式表示您可以稍後更改核心算法。例如,當您編寫電子商務應用程序時,您有B2B和B2C客戶,這些客戶有不同的付款和訂購方式。然後,您將使用策略模式作爲結帳策略。所以基本的行動是一樣的,但兩個用戶使用不同的方式(策略)來實現。相反,橋樑模式表示您在兩個模塊之間建立了橋樑,您可以獨立更換這些模塊。這是針對抽象和信息隱藏。

3

在你的例子中,我看到這兩個模式之間有一點重疊。

在第一種情況下,當我們需要將抽象與其實現分離時,使用Bridge模式,以使兩者可以獨立變化。 就是這樣,你只是在抽象實現。

在第二種情況下,可以在運行時更改類行爲。這也意味着進入一個具體的策略類,你也可以實現一個橋樑模式,也許你正在使用一個類,並希望去實現它。

0

該網橋用於封裝組件並暴露其他一些接口。當您使用具有您無法控制的生命週期的組件時,通常會使用橋接器。它限制了軟件對實現橋接的依賴性。

當您有不同的可能算法來執行特定操作時,將使用策略模式,並且您不希望保持從一個切換到另一個的能力。