<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                **定義**:定義一組算法,將每個算法都封裝其阿里,并且使它們之間可以互換。 ## 策略模式的一般模式: ![](https://box.kancloud.cn/2016-06-06_5755340aceb01.jpg) Context封裝角色 ---|它也叫作上下文對象,起承上啟下封裝作用,屏蔽高層模塊對策略、算法的直接訪問, 封裝可能存在的變化。 Strategy抽象策略角色 ---|策略、算法家族的抽象,通常為接口,定義每個策略或算法必須具有的方法和屬性。 ConcreteStrategy具體策略角色 ---|實現抽象策略中的操作,該類含有具體的算法。 ~~~ public class StrategyT { public static void main(String[] args) { //實現某個算法。 Context context = new Context(new ConcreteStrategy()); context.action(); } } interface Strategy{ //實現具體的算法操作 public void doSomething(); } class ConcreteStrategy implements Strategy{ @Override public void doSomething() { System.out.println("come on operate some Arithmetics..."); } } class Context{ //私有方法指向具體的策略實現者 private Strategy strategy; public Context(Strategy strategy) { this.strategy = strategy; } public void action(){ this.strategy.doSomething(); } } ~~~ ## 一個例子: 諸葛亮錦囊妙計的故事大家都聽說過,那么在這個故事中也涉及到一個設計模式的道理。 首先,諸葛亮給趙云三個錦囊,錦囊中分別是三個妙計,趙云在固定的地點打開錦囊,執行其任務, 便能夠化險為夷。那么我們用代碼去實現這個策略模式吧。 ![](https://box.kancloud.cn/2016-06-06_5755340ae4094.jpg) ~~~ public class StrategyTest { public static void main(String[] args) { //趙云來到吳國,打開第一個錦囊 System.out.println("-------趙云來到吳國,打開第一個錦囊-----------"); MyContext context1 = new MyContext(new BackDoor()); //執行第一個錦囊妙招 context1.operate(); System.out.println("-------遇到麻煩打開第二個錦囊-------------"); //遇到麻煩打開第二個錦囊 MyContext context2 = new MyContext(new BackDoor()); //執行第一個錦囊妙招 context2.operate(); System.out.println("-------想要溜走,又遇到麻煩---------"); //想要溜走,又遇到麻煩 MyContext context3 = new MyContext(new BackDoor()); //執行第一個錦囊妙招 context3.operate(); } } interface IStrategy{ //錦囊中的妙計,實現方法.具體的實現算法 void operate(); } /** * 錦囊妙計一 * @author admin * */ class BackDoor implements IStrategy{ @Override public void operate() { System.out.println("找喬國老開后門"); } } /** * 錦囊妙計二 * @author admin * */ class GivenGreenLight implements IStrategy{ @Override public void operate() { System.out.println("找吳國太開綠燈"); } } /** * 錦囊妙計三 * @author admin * */ class BlockEnemy implements IStrategy{ @Override public void operate() { System.out.println("孫夫人斷后"); } } /** * 具體的承載妙計的錦囊。 * @author admin * */ class MyContext { //一個私有對象指向具體的實現算法類。 private IStrategy strategy; public MyContext(IStrategy strategy) { this.strategy = strategy; } public void operate(){ this.strategy.operate(); } } ~~~ **策略模式的優點**: ---|算法可以自由切換 ---|避免使用多重條件的判斷 ---|擴展性良好 **策略模式的缺點** ---|策略類數量增多 ---|所有的策略類需要對外暴露 **策略模式的使用場景** ---|多個類只有在算法或行為上稍有不同的場景 ---|算法需要自由切換的場景 ---|需要屏蔽算法規則的場景
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看