前言:【模式總覽】——————————by xingoohtml
定義一系列的算法,把他們封裝起來,使得算法獨立於適用對象。算法
好比,一個系統有不少的排序算法,可是使用哪一個排序算法是客戶對象的自有。所以把每個排序當作一個策略對象,客戶調用哪一個對象,就使用對應的策略方法。this
應用場景spa
1 當許多的類,僅僅是行爲或者策略不一樣時,能夠把行爲或策略單獨提取出來,這樣主體的類就能夠進行統一了。code
2 須要使用不一樣的算法。htm
3 一個類定義了多種行爲。對象
Context 環境角色的,策略的調用者blog
class Context{ private Strategy strategy; public Strategy getStrategy() { return strategy; } public void setStrategy(Strategy strategy) { this.strategy = strategy; } public void operation(){ strategy.action(); } }
Strategy 策略的抽象,規定了統一的調用接口排序
interface Strategy{ public void action(); }
ConcreteStrategy 具體的策略接口
class ConcreteStrategy1 implements Strategy{ public void action(){ System.out.println("strategy1 oepration"); } } class ConcreteStrategy2 implements Strategy{ public void action(){ System.out.println("strategy2 oepration"); } }
所有代碼
package com.xingoo.test.design.strategy; class Context{ private Strategy strategy; public Strategy getStrategy() { return strategy; } public void setStrategy(Strategy strategy) { this.strategy = strategy; } public void operation(){ strategy.action(); } } interface Strategy{ public void action(); } class ConcreteStrategy1 implements Strategy{ public void action(){ System.out.println("strategy1 oepration"); } } class ConcreteStrategy2 implements Strategy{ public void action(){ System.out.println("strategy2 oepration"); } } public class Client { public static void main(String[] args) { Context ctx = new Context(); ctx.setStrategy(new ConcreteStrategy1()); ctx.operation(); ctx.setStrategy(new ConcreteStrategy2()); ctx.operation(); } }
運行結果
strategy1 oepration strategy2 oepration