国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

設(shè)計(jì)模式六大原則(5)—迪米特法則

2019-11-17 03:00:48
字體:
供稿:網(wǎng)友
設(shè)計(jì)模式六大原則(5)—迪米特法則

定義:

一個(gè)對(duì)象應(yīng)該對(duì)其它的對(duì)象保持最少的了解。迪米特法則又稱為最少知識(shí)法則,英文全稱為L(zhǎng)east Knowledge PRinciple ,簡(jiǎn)稱為L(zhǎng)KP。

個(gè)人理解:

迪米特法則主要目的是類間解耦,弱耦合。只有類弱耦合了后,類的復(fù)用性才會(huì)提高。

問題由來:

類之間的關(guān)系越密切,類之間的耦合程度越高。當(dāng)一個(gè)類發(fā)改變時(shí),耦合度越大,對(duì)另一類的影響也就越大。

解決方案:

盡量降低類之間的耦合度。

從事編程的都知道,軟件編程總的原則是低耦合、高內(nèi)聚,只有這樣才能提高代碼的復(fù)用率,而這正是迪米特法則所要求的。迪米特法則還有一個(gè)更簡(jiǎn)單的定義:只與直接的朋友通信。首先來解釋一下什么是直接的朋友:每個(gè)對(duì)象都會(huì)與其他對(duì)象有耦合關(guān)系,只要兩個(gè)對(duì)象之間有耦合關(guān)系,我們就說這兩個(gè)對(duì)象之間是朋友關(guān)系。耦合的方式很多,依賴、關(guān)聯(lián)、組合、聚合等。其中,我們稱出現(xiàn)成員變量、方法參數(shù)、方法返回值中的類為直接的朋友,而出現(xiàn)在局部變量中的類則不是直接的朋友。也就是說,陌生的類最好不要作為局部變量的形式出現(xiàn)在類的內(nèi)部。

舉例說明:

老師(Teacher類)對(duì)組長(zhǎng)(GroupLeader類)發(fā)布命令,組長(zhǎng)對(duì)女生(Gril類)人數(shù)統(tǒng)計(jì)并輸出來。違反迪米特法則的代碼如下所示:

public class Girl    {            }    public class GroubLeader    {        //有清查女生的工作        public void CountGrilNumber(List<Girl> girlslist)        {            Console.WriteLine("女生的數(shù)量是"+girlslist.Count);        }    }    public class Teacher    {        public void Command(GroubLeader groubLeader)        {            var grilList = new List<Girl>();            //初始化女生列表            for (var i = 0; i < 30; i++)            {                grilList.Add(new Girl());            }            //告訴體育委員要清查女生數(shù)量            groubLeader.CountGrilNumber(grilList);        }    }    class Client    {        static void Main(string[] args)        {            var teacher = new Teacher();            //老師發(fā)布命令            teacher.Command(new GroubLeader());            Console.ReadKey();        }     }

上面的代碼中Teacher初始化了Gril的List列表,老師直接操作女生的列表這顯然不符合常規(guī),更不符合迪米特法則,正常的順序是老師對(duì)組長(zhǎng)發(fā)布命令,組長(zhǎng)統(tǒng)計(jì)女生人數(shù)。類的關(guān)系要盡量的解耦,降低他們的耦合度。改進(jìn)方法是GroupLeader內(nèi)部私有化一個(gè)List<Gril>變量,在構(gòu)造GroupLeader變量時(shí)傳遞List<Gril>參數(shù),這樣就降低了Gril和GroupLeader的耦合度。改進(jìn)代碼如下所示:

public class Girl    {            }    public class GroubLeader    {        private readonly List<Girl> _girList;        public GroubLeader(List<Girl> girlList)        {            _girList = girlList;        }        //有清查女生的工作        public void CountGrilNumber()        {            Console.WriteLine("女生的數(shù)量是" + _girList.Count);        }    }    public class Teacher    {        public void Command(GroubLeader groubLeader)        {                        //告訴體育委員要清查女生數(shù)量            groubLeader.CountGrilNumber();        }    }    class Client    {        static void Main(string[] args)        {            var girlList = new List<Girl>();            //初始化女生列表            for (var i = 0; i < 30; i++)            {                girlList.Add(new Girl());            }            var teacher = new Teacher();            //老師發(fā)布命令            teacher.Command(new GroubLeader(girlList));            Console.ReadKey();        }     }

上面的例子只是單純的說明迪米特法則的使用,可能有些牽強(qiáng),關(guān)鍵還是理解一個(gè)對(duì)象應(yīng)盡量對(duì)其它對(duì)象保持少的了解這句話的意思。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 陆丰市| 新昌县| 若尔盖县| 肥城市| 道孚县| 正宁县| 赤水市| 介休市| 遵义县| 安丘市| 河北区| 辽阳县| 哈巴河县| 凤阳县| 信丰县| 讷河市| 彭水| 京山县| 永春县| 图木舒克市| 陇西县| 安图县| 公安县| 察雅县| 萝北县| 阳朔县| 洛扎县| 平昌县| 同仁县| 闵行区| 牙克石市| 太保市| 金昌市| 延川县| 伊川县| 朝阳区| 大连市| 东兴市| 日土县| 阿坝| 横山县|