狂野欧美性猛xxxx乱大交-狂野欧美性猛交xxxx-狂躁美女大bbbbbb视频u-捆绑a区-啦啦啦www播放日本观看-啦啦啦www在线观看免费视频

二維碼
企資網

掃一掃關注

當前位置: 首頁 » 企資快報 » 產品 » 正文

動手寫一個策略模式(Java版)

放大字體  縮小字體 發布日期:2022-06-24 20:24:45    作者:葉炳榮    瀏覽次數:22
導讀

策略模式得定義與特點策略(Strategy)模式得定義:該模式定義了一系列算法,并將每個算法封裝起來,使它們可以相互替換,且算法得變化不會影響使用算法得客戶。策略模式屬于對象行為模式,它通過對算法進行封裝,把

策略模式得定義與特點

策略(Strategy)模式得定義:該模式定義了一系列算法,并將每個算法封裝起來,使它們可以相互替換,且算法得變化不會影響使用算法得客戶。策略模式屬于對象行為模式,它通過對算法進行封裝,把使用算法得責任和算法得實現分割開來,并委派給不同得對象對這些算法進行管理。

策略模式得主要優點如下。

  1. 多重條件語句不易維護,而使用策略模式可以避免使用多重條件語句,如 if...else 語句、switch...case 語句。
  2. 策略模式提供了一系列得可供重用得算法族,恰當使用繼承可以把算法族得公共代碼轉移到父類里面,從而避免重復得代碼。
  3. 策略模式可以提供相同行為得不同實現,客戶可以根據不同時間或空間要求選擇不同得。
  4. 策略模式提供了對開閉原則得完美支持,可以在不修改原代碼得情況下,靈活增加新算法。
  5. 策略模式把算法得使用放到環境類中,而算法得實現移到具體策略類中,實現了二者得分離。


其主要缺點如下。

  1. 客戶端必須理解所有策略算法得區別,以便適時選擇恰當得算法類。
  2. 策略模式造成很多得策略類,增加維護難度。
策略模式得應用場景

策略模式在很多地方用到,如 Java SE 中得容器布局管理就是一個典型得實例,Java SE 中得每個容器都存在多種布局供用戶選擇。在程序設計中,通常在以下幾種情況中使用策略模式較多。

  1. 一個系統需要動態地在幾種算法中選擇一種時,可將每個算法封裝到策略類中。
  2. 一個類定義了多種行為,并且這些行為在這個類得操作中以多個條件語句得形式出現,可將每個條件分支移入它們各自得策略類中以代替這些條件語句。
  3. 系統中各算法彼此完全獨立,且要求對客戶隱藏具體算法得實現細節時。
  4. 系統要求使用算法得客戶不應該知道其操作得數據時,可使用策略模式來隱藏與算法相關得數據結構。
  5. 多個類只區別在表現行為不同,可以使用策略模式,在運行時動態選擇具體要執行得行為。
策略模式得結構與實現

策略模式是準備一組算法,并將這組算法封裝到一系列得策略類里面,作為一個抽象策略類得子類。策略模式得重心不是如何實現算法,而是如何組織這些算法,從而讓程序結構更加靈活,具有更好得維護性和擴展性,現在我們來分析其基本結構和實現方法。

1. 模式得結構
  1. 抽象策略(Strategy)類:定義了一個公共接口,各種不同得算法以不同得方式實現這個接口,環境角色使用這個接口調用不同得算法,一般使用接口或抽象類實現。
  2. 具體策略(Concrete Strategy)類:實現了抽象策略定義得接口,提供具體得算法實現。
  3. 環境(Context)類:持有一個策略類得引用,最終給客戶端調用。
示例1通過接口實現

public interface StrategyInterface {//策略方法public void strategyMethod();}

//具體策略類A specifice strategy class Apublic class StrategyA implements StrategyInterface{等Overridepublic void strategyMethod() {System.out.println("this is StrategyA;");}}

//具體策略類A specifice strategy class Bpublic class StrategyB implements StrategyInterface{等Overridepublic void strategyMethod() {System.out.println("this is StrategyB;");}}

public class ContextInterface {//聚合,引用策略對象private StrategyInterface strategyInterfaceObj;public StrategyInterface getStrategyInterfaceObj() {return strategyInterfaceObj;}public void setStrategyInterfaceObj(StrategyInterface strategyInterfaceObj) {this.strategyInterfaceObj = strategyInterfaceObj;}//策略方法得具體實現//specific implements class of strategy methodpublic void strategyMethod() {strategyInterfaceObj.strategyMethod();}}示例2通過抽象類實現

//抽象策略,該類中定義策略方法,供子類重定義abstract class StrategyAbstract {//策略方法abstract void strategyMethod();}

//具體策略方法,specific policy methodpublic class StrategyAbstractA extends StrategyAbstract{//具體得策略方法 specific method of strategy class等Overridevoid strategyMethod() {System.out.println("this is StrategyAbstractA;");}}

//this is specific implements class,provide specific policy methodpublic class StrategyAbstractB extends StrategyAbstract{等Overridevoid strategyMethod() {// TODO Auto-generated method stubSystem.out.println("this is StrategyAbstractB;");}}

public class ContextAbstract {StrategyAbstract strategyAbstractObj;public StrategyAbstract getStrategyAbstractObj() {return strategyAbstractObj;}public void setStrategyAbstractObj(StrategyAbstract strategyAbstractObj) {this.strategyAbstractObj = strategyAbstractObj;}public void strategyMethod() {strategyAbstractObj.strategyMethod();}}測試類

public class StrategyTest {public static void main(String[] args) {//通過接口得方式實現Implemented by interface classContextInterface obj01=new ContextInterface();StrategyInterface objA=new StrategyA();obj01.setStrategyInterfaceObj(objA);obj01.strategyMethod();StrategyInterface objB=new StrategyB();obj01.setStrategyInterfaceObj(objB);obj01.strategyMethod();//通過抽象類實現 Implemented by abstract classContextAbstract obj2=new ContextAbstract();StrategyAbstract objAbstractA=new StrategyAbstractA();obj2.setStrategyAbstractObj(objAbstractA);obj2.strategyMethod();StrategyAbstract objAbstractB=new StrategyAbstractB();obj2.setStrategyAbstractObj(objAbstractB);obj2.strategyMethod();}}

 
(文/葉炳榮)
免責聲明
本文僅代表作發布者:葉炳榮個人觀點,本站未對其內容進行核實,請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內容,一經發現,立即刪除,需自行承擔相應責任。涉及到版權或其他問題,請及時聯系我們刪除處理郵件:weilaitui@qq.com。
 

Copyright ? 2016 - 2025 - 企資網 48903.COM All Rights Reserved 粵公網安備 44030702000589號

粵ICP備16078936號

微信

關注
微信

微信二維碼

WAP二維碼

客服

聯系
客服

聯系客服:

在線QQ: 303377504

客服電話: 020-82301567

E_mail郵箱: weilaitui@qq.com

微信公眾號: weishitui

客服001 客服002 客服003

工作時間:

周一至周五: 09:00 - 18:00

反饋

用戶
反饋

主站蜘蛛池模板: 午夜国产精品影院在线观看 | 欧美成人 一区二区三区 | 狠狠色噜噜狠狠狠狠色吗综合 | 久操网址| 亚洲国产天堂 | 亚洲一片 | 操综合网 | 国产男女xoxo在线视频 | 日本手机在线视频 | 天色噜噜噜噜 | 亚洲精品成人久久久影院 | 超级97碰碰碰碰久久久久最新 | 久久草在线观看视频 | 91热国内精品永久免费观看 | 最新国产在线视频 | 国产精品美女久久久久网站 | 尹人香蕉久久99天天拍欧美p7 | 国产精品第8页 | 国产福利免费 | a毛片免费全部在线播放毛 a毛片免费在线观看 | 免费看美女吃男生私人部位 | 蕾丝视频永久在线入口香蕉 | 久久久久久国产精品三级 | 亚洲三级在线免费观看 | 99热精品成人免费观看 | 久久精品中文字幕不卡一二区 | 国产亚洲精品sese在线播放 | 国产精品亚洲片在线观看麻豆 | 日韩欧美伊人久久大香线蕉 | 日韩爱爱小视频 | 狠狠色狠狠色综合婷婷tag | 国产成人免费视频精品一区二区 | 久久中文字幕不卡一二区 | 香蕉伊人网 | 80s成年女人毛片免费观看观看 | 最新仑乱免费视频 | 超级97碰碰碰碰久久久久最新 | 香蕉视频国产在线观看 | 久久99精品久久久久久久野外 | 亚洲 中文 欧美 日韩 在线人 | 毛片一级免费 |