策略模式

策略模式,多用組合,少用繼承


將需要變化的部分隔離出來,不要與不需要變化的混在一起

eg:某一個行為(吃瓜),不同的子類實(shí)現(xiàn)不同的吃瓜方式

方式一,直接繼承父類:

父類(人),吃瓜waterMelon();

由于每個人的吃相不一樣,分別override吃瓜的方法,這樣一來,需要重寫的方法太多

子類1重寫吃瓜方法waterMelon(){

吃瓜方法1

};

子類2重寫吃瓜方法waterMelon(){

吃瓜方法3

};

子類3重寫吃瓜方法waterMelon(){

吃瓜方法3

};

另一方面,還有一個弊端,有的人吃瓜過敏,但是同樣要繼承父類的吃瓜行為,然而他不能吃瓜,形成bug隱患


方式二,提出接口:

父類(人),吃瓜waterMelon();

提出waterMelon()作為接口WaterMelon的方法,有吃瓜愛好的人實(shí)現(xiàn)該接口,過敏者不實(shí)現(xiàn)

子類1實(shí)現(xiàn)吃瓜方法waterMelon(){

吃瓜方法1

};

子類2實(shí)現(xiàn)吃瓜方法waterMelon(){

吃瓜方法2

};

子類3不實(shí)現(xiàn)該接口

這樣寫會減少很多代碼,也使得繼承結(jié)構(gòu)更有邏輯性

但是,仍然存在弊端:

假如現(xiàn)在有100個人,其中有80人的吃瓜方式一樣,于是,必須寫80個waterMelon()相同的方法(實(shí)現(xiàn)接口必須重寫方法),

造成代碼的嚴(yán)重重復(fù)


方式三,提出吃瓜行為的接口WaterMelon,提出不同吃瓜方法的實(shí)現(xiàn)類

WaterMelon_1 implements WaterMelon{

waterMelon(){

吃瓜方法1

}

}

WaterMelon_2 implements WaterMelon{

waterMelon(){

吃瓜方法2

}

}

WaterMelon_3 implements WaterMelon{

waterMelon(){

不吃瓜

}

}

1.將WaterMelon w 作為父類的成員變量,

2.子類根據(jù)不同的需求進(jìn)行初始化,eg:WaterMelon w=new WaterMelon_2()

3.執(zhí)行waterMelon()方法,w.waterMelon()

這樣只用根據(jù)吃瓜方式的不同撰寫幾個實(shí)現(xiàn)類即可

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容