日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
策略模式范例:有關(guān)足球的場景

你了解策略模式么?如果你對足球很熟悉,那么看了下面的介紹后,你大概會同樣熟悉策略模式了。

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比昆都侖網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式昆都侖網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋昆都侖地區(qū)。費(fèi)用合理售后完善,10余年實(shí)體公司更值得信賴。

這里設(shè)計(jì)了一個有關(guān)足球的場景,在進(jìn)攻當(dāng)中暫分為傳球和射門兩個動作。

最開始你可能會這樣想,設(shè)計(jì)一個抽象類(Attact),傳球和射門分別定義好,子類會有一些他們個性的東西。比如球員號碼,教練名稱等等。

后來你發(fā)現(xiàn)傳球和射門可能會分好多種,傳球可分為短傳和長傳,射門又分為巴蒂式射門和因扎吉式的搶點(diǎn)。這樣就不能將他們都寫在這個抽象類(Attact)中,比如有的隊(duì)員就是一個工兵型的(像AC米蘭的加圖索)他不停的搶斷傳球,很少參與到射門當(dāng)中來。這樣再定義若干個子類來繼承(Attact)就不能滿足需求。

我們可以把諸如傳球和射門等動作抽象出來。組合到該抽象類中,只需在其中調(diào)用具體的方法即可。

像這樣來定義:(其中Passable和Shootable為行為接口)

 
 
 
 
  1. package strategy;
  2. /**
  3.  * @author edison
  4.  * @date 2009-9-24
  5.  */
  6. public abstract class Attact {
  7.  Passable pass;
  8.  Shootable shoot;
  9.  
  10.  public abstract void display();
  11.  
  12.  public void ownPass(){
  13.   pass.action();
  14.  }
  15.  public void ownShoot(){
  16.   shoot.action();
  17.  }
  18.  public void setPass(Passable pass) {
  19.   this.pass = pass;
  20.  }
  21.  public void setShoot(Shootable shoot) {
  22.   this.shoot = shoot;
  23.  }
  24.  
  25. }

這里我們采用了策略模式,將傳球和射門這一類動作定義為標(biāo)準(zhǔn),封裝起來,讓他們之間可以互相的組合和替換,這樣有效的使具體操作和實(shí)現(xiàn)分離。

上面一段話也可以這樣說:

策略模式定義了算法族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化獨(dú)立于使用算法的客戶。

得到幾個設(shè)計(jì)原則:

1.找到應(yīng)用中可能變化之處,把它們獨(dú)立初以來,不要和那些不需要變化的代碼混在一起。

2.針對接口編程,而不是針對實(shí)現(xiàn)編程。

3.多用組合,少用繼承。

類圖:

以上就是策略模式的一個簡單案例。


文章標(biāo)題:策略模式范例:有關(guān)足球的場景
當(dāng)前網(wǎng)址:http://m.5511xx.com/article/ccdhjgg.html