一起学设计模式-策略模式
一、模式介紹
? ? ? ?策略模式(Strategy Pattern):定義一系列算法,將每一個(gè)算法封裝起來(lái),并讓它們可以相互替換。
? ? ? ?策略模式讓算法獨(dú)立于使用它的客戶(hù)而變化,也稱(chēng)為政策模式(Policy)。
? ? ? ?策略模式是一種對(duì)象行為型模式。
二、模式結(jié)構(gòu)
三、模式代碼
? ? 1、抽象策略接口
package com.example.demo.strategy; //策略接口 public interface Strategy {public String doScheme(String name,String scheme); }? ? 2、具體策略美人計(jì)
package com.example.demo.strategy;//美人計(jì) public class Beauty implements Strategy{@Overridepublic String doScheme(String name,String scheme) {String all = scheme+" "+"eg:"+name;return "美人計(jì):" + all;} }? ? 3、具體策略苦肉計(jì)
package com.example.demo.strategy;//苦肉計(jì) public class BitterMeat implements Strategy{@Overridepublic String doScheme(String name,String scheme) {String all = scheme+" "+"eg:"+name;return "苦肉計(jì):" + all;} }? ? 4、具體策略空城計(jì)
package com.example.demo.strategy;//空城計(jì) public class EmptyCity implements Strategy{public String doScheme(String name,String scheme) {String all = scheme+" "+"eg:"+name;return "空城計(jì):" + all;} }? ? 5、創(chuàng)建上下文
package com.example.demo.strategy;//上下文 public class Context {private Strategy strategy;public Context(Strategy strategy){this.strategy = strategy;}public String executeStrategy(String name,String scheme){return strategy.doScheme(name, scheme);} }? ? 6、 模擬調(diào)用各策略
package com.example.demo.strategy;//調(diào)用策略 public class Main {public static void main(String[] args) {Context context = new Context(new EmptyCity());System.out.println(context.executeStrategy("諸葛亮","虛而示虛的疑兵之計(jì),是一種疑中生疑的心理戰(zhàn),多用于己弱而敵強(qiáng)的情況。"));context = new Context(new BitterMeat());System.out.println(context.executeStrategy("三十六計(jì)","自己傷害自己,以蒙騙他人,從而達(dá)到預(yù)先設(shè)計(jì)好的目標(biāo)。"));context = new Context(new Beauty());System.out.println(context.executeStrategy("王允,貂蟬之義父","它是利用色情、出賣(mài)肉體的方法,以女性勾引男性對(duì)象,以男性勾引女性對(duì)象,進(jìn)行間諜情報(bào)活動(dòng)。"));} }? ? 7、打印結(jié)果
四、使用情景
? ? 完成一項(xiàng)任務(wù),往往可以有多種不同的方式,每一種方式稱(chēng)為一個(gè)策略,我們可以根據(jù)環(huán)境或者條件的不同選擇不同的策略來(lái)完成該項(xiàng)任務(wù)。
? ??1、諸葛亮的錦囊妙計(jì),每一個(gè)錦囊就是一個(gè)策略。
? ? 2、旅行的出游方式,選擇騎自行車(chē)、坐汽車(chē),每一種旅行方式都是一個(gè)策略。
? ? 3、登錄認(rèn)證,現(xiàn)在需要登錄linux、Windows、mac、認(rèn)證數(shù)據(jù)庫(kù)。每種認(rèn)證方式可以封裝一個(gè)策略。
五、優(yōu)缺點(diǎn)
優(yōu)點(diǎn): 1、算法可以自由切換。 2、避免使用多重條件判斷。 3、擴(kuò)展性良好。
缺點(diǎn): 1、客戶(hù)端必須知道所有策略類(lèi),并自行決定使用哪一種策略類(lèi)。2、如果算法較多,則會(huì)造成很多的策略類(lèi)。
六、demo地址
https://github.com/tongyuxin1/designModel/tree/master/src/main/java/com/example/demo
總結(jié)
以上是生活随笔為你收集整理的一起学设计模式-策略模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: layui select下拉框改变之 c
- 下一篇: 一起学设计模式-观察者模式