【設計模式】—— 策略模式Strategy

  前言:【模式總覽】——————————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
相關文章
相關標籤/搜索