wordpress主頁百度seo營銷
本文僅作學(xué)習(xí)筆記與交流,不作任何商業(yè)用途,作者能力有限,如有不足還請(qǐng)斧正
本系列作為七大原則和設(shè)計(jì)模式的進(jìn)階知識(shí),看不懂沒關(guān)系請(qǐng)看專欄:http://t.csdnimg.cn/mIitr,查漏補(bǔ)缺
1.迪米特法則(Law ? Of Demeter )
????????迪米特法則強(qiáng)調(diào)了對(duì)象之間的松耦合。具體來說,它指出一個(gè)對(duì)象不應(yīng)該知道太多關(guān)于其他對(duì)象的細(xì)節(jié),只與直接的朋友通信
????????朋友是指:與該對(duì)象直接交互的其他對(duì)象或與該對(duì)象有關(guān)聯(lián)關(guān)系的其他對(duì)象
2.舉栗子
反例
我有三個(gè)類,服務(wù)員,菜單和顧客,我想讓顧客點(diǎn)餐,需要什么?
一個(gè)服務(wù)員
一份菜單
服務(wù)員點(diǎn)單的行為
但是我不想讓顧客知道我菜單的一些細(xì)節(jié),比如我菜單內(nèi)要是寫了成本價(jià),顯然不能讓其知道
但是在這個(gè)設(shè)計(jì)中,People
?類直接依賴于?Menu
?類,違反了迪米特法則
應(yīng)該避免讓?People
?類知道太多關(guān)于?Menu
?類的細(xì)節(jié) ,但仍舊能讓顧客點(diǎn)餐
修改
菜單類不變,直接讓全權(quán)讓服務(wù)員托管點(diǎn)單就行了
// 服務(wù)員
public class Waiter
{// 私有,不對(duì)外開放private Menu menu = new Menu();public string GetMenuContent(){return menu.Content;}
}// 顧客
public class People
{public void GetMenu(){Waiter waiter = new Waiter();Console.WriteLine(waiter.GetMenuContent());}
}