應用場景:
1、如果在一個系統里面有許多類,它們之間的區別僅在于它們的行為,那么使用策略模式可以動態地讓一個物件在許多行為中選擇一種行為,
2、一個系統需要動態地在幾種演算法中選擇一種,
3、如果一個物件有很多的行為,如果不用恰當的模式,這些行為就只好使用多重的條件選擇陳述句來實作,
實作步驟:
以人吃飯的方式不同來舉例,
1、定義一個介面,介面中定義行為方法;
public interface EatStrategy { void eat();//吃飯策略 }
2、定義多個需要實作該行為方法的實作類;
單身狗,只能一個人吃飯
public class SingleEat implements EatStrategy { @Override public void eat() { System.out.println("一個人吃"); } }
有物件的人,兩個人吃飯
public class DoubleEat implements EatStrategy { @Override public void eat() { System.out.println("兩個人吃"); } }
3、定義容器類(Person),組合行為方法的實作類(EatStrategy),需要時呼叫實作類的方法即可,
張三現在20歲,職業程式員,平時作業太忙,來不及找物件,所以吃飯只能采用單身狗方式:
public class Person { private EatStrategy eatStrategy; public Person(EatStrategy eatStrategy){ this.eatStrategy = eatStrategy;//構造方法設定吃飯實體 } public void setEatStrategy(EatStrategy eatStrategy) { this.eatStrategy = eatStrategy;//setter方法設定吃飯實體 } public void eat(){ eatStrategy.eat();//使用吃飯實體吃飯 } public static void main(String[] args) { Person person = new Person(new SingleEat()); person.eat(); } }

10年過去了,張三當上了公司研發總監,陸續買房買車,找女友更是不在話下,現在張三吃飯變為兩個人吃了:
public class Person { private EatStrategy eatStrategy; public Person(EatStrategy eatStrategy) { this.eatStrategy = eatStrategy; } public void setEatStrategy(EatStrategy eatStrategy) { this.eatStrategy = eatStrategy; } public void eat() { eatStrategy.eat(); } public static void main(String[] args) { Person person = new Person(new SingleEat()); person.eat(); //ten years later person.setEatStrategy(new DoubleEat());//呼叫setter方法,切換吃飯策略 person.eat(); } }

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/308458.html
標籤:設計模式
上一篇:[C++] Class工廠
下一篇:設計模式之策略
