《圖解設計模式》 第四部分 分開考慮

大俗XD發表於2024-11-04

第九章 Bridge模式

//使用程式碼
public class Main(){
  public static void main(String[] args){
    Display d1 = new Display(new StringDisPlayImpl("Hello, China."));
    Display d2 = new CountDisplay(new StringDisPlayImpl("Hello, World."));
    CountDisplay d3 = new CountDisplay(new StringDisPlayImpl("Hello, Universe."));

    d1.display();
    d2.display();
    d3.display();
    d3.multiDisplay(5);
  }
}
public class String Display{
  /*
  * 省略
  */
  //注意看這裡 可以達到 功能層次結構和 實現層次結構分離,這裡可以。類似 介面卡模式。
  //但是 介面卡模式 是結合功能上相似但是介面 不同的類。 
  public void open(){
     impl.rawOpen();
  }
  
  //這裡類似 Template Method 模式使用了 類的 實現層次結構。
  public final void display(){
    open();
    print();
    close();
  }
}
public class String DisplayImpl extends DisplayImpl{
  /*
  * 省略
  */

  public void rawOpen(){
    
  }
}

第十章 Strategy 模式

public interface Strategy(){
  public abstract Hand nextHand();
  public abstract void study(boolean win);
}

public class WinningStrategy implements Strategy{
  /* 部分程式碼省略 */
  private boolean won = false;
  private Hand prevHand;
  public Hand nextHand(){
    if(!won){
      prevHand = Hand.getHand(random.nextInt(3));
    }
    return prevHand;
  }

  public void study(boolean win){
    won = win
  }
}

public class Player{
  /* 部分程式碼省略 */
  public Hand nextHand(){
    return strategy.nextHand();
  }
}

和 Abstract Factory 相似思想是
Strategy 模式可以整體替換演算法。
Abstract Factory 可以整體替換工廠,零件 和 產品。

相關文章