? 我想我瘋了。。。跑到網(wǎng)吧來(lái)寫代碼。。。。。
? 昨天看了《Head First 設(shè)計(jì)模式》剛看了第一章,感覺(jué)收獲很大,至少我知道什么是策略模式。。。但是到昨天看完之后我還是不了解為什么叫做策略模式。。。后來(lái)在廁所里想了下。。。。。。。今天就跑到網(wǎng)吧把我的想法寫出來(lái)了。。。放清明,電腦還在學(xué)校(悲劇的臺(tái)式機(jī))
戰(zhàn)將類--小說(shuō)《修真世界》中戰(zhàn)將就使用策略的高手,將使用的策略的具體實(shí)現(xiàn)交給Strategy類去實(shí)現(xiàn),就把變化的部分的分離開了。
?
package com.wjh.celue;
public class Fights {
//策略實(shí)例變量
Strategy myStrategy;
public Fights(Strategy strategy)
{
//初始化
this.myStrategy = strategy;
}
//設(shè)置策略
public void SetStrategy(Strategy strategy)
{
this.myStrategy = strategy;
}
//使用策略
public void useStrategy()
{
myStrategy.use();
}
}
?策略類---策略的總父類,其子類必須實(shí)現(xiàn)其use方法,所有的具有相互替換性
package com.wjh.celue;
/**
* 策略的抽象類,策略的子類必須實(shí)現(xiàn)use方法
* @author Administrator
*
*/
public abstract class Strategy {
public abstract void use();
}
?空城計(jì)--策略的子類,實(shí)現(xiàn)了use方法.
package com.wjh.celue;
import static com.wjh.print.MyPrint.*;
//繼承策略類
public class KongChengJi extends Strategy{
@Override
public void use() {
// TODO Auto-generated method stub
println("使用空城記");
}
}
?
美人計(jì)--策略的子類,同樣實(shí)現(xiàn)了use方法.
package com.wjh.celue;
import static com.wjh.print.MyPrint.*;
/**
* 策略類的子類,實(shí)現(xiàn)use方法
* @author Administrator
*
*/
public class MeiRenJi extends Strategy{
@Override
public void use() {
// TODO Auto-generated method stub
println("使用美人計(jì)");
}
}
?主類---創(chuàng)建戰(zhàn)將類實(shí)例小娘(在<<修真世界>>中,小娘是一個(gè)戰(zhàn)將),他會(huì)使用各種策略.
創(chuàng)建各種策略對(duì)象,并讓小娘使用.
因?yàn)樗麄兌祭^承于策略類,在多態(tài)的神奇效果下,他們都調(diào)用他們本身的use方法.
package com.wjh.main;
import com.wjh.celue.Fights;
import com.wjh.celue.KongChengJi;
import com.wjh.celue.MeiRenJi;
public class MainUi {
public static void main(String[] args)
{
//創(chuàng)建戰(zhàn)將類對(duì)象小娘
Fights xiaoLiang = new Fights(new KongChengJi());
//小娘使用策略
xiaoLiang.useStrategy();
//小娘換策略
xiaoLiang.SetStrategy(new MeiRenJi());
//小娘使用策略
xiaoLiang.useStrategy();
}
}
?總結(jié)...雖然小娘并不會(huì)使用空城計(jì)和美人計(jì),但是通過(guò)這個(gè)例子,我更了解為什么策略模式叫做策略模式...
?
策略模式的定義:策略模式定義了一系列的算法,并將每一個(gè)算法封裝起來(lái),而且使它們還可以相互替換。策略模式讓算法獨(dú)立于使用它的客戶而獨(dú)立變化(來(lái)自百度百科)
?
但我自己覺(jué)得那些算法就是一個(gè)個(gè)的策略(或許他們本來(lái)就是一樣的),用于解決各種問(wèn)題.
而因?yàn)橛?jì)劃永遠(yuǎn)趕不上變化,所以我們把變化拿出來(lái),整成一個(gè)方法集(例如:36計(jì)).在實(shí)施(打仗)的時(shí)候,
我們根據(jù)需要去使用相應(yīng)的方法(策略),這就達(dá)到了一種以不變應(yīng)萬(wàn)變的效果...
?
?
備注:以上內(nèi)容都是我自己在學(xué)習(xí)過(guò)程中的想法,或許是錯(cuò)的,請(qǐng)大家告訴我......謝謝...
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

