設計模式六大原則----------迪米特法則

設計模式總覽


迪米特法則(Law of Demeter)又叫作最少知識原則(Least Knowledge Principle 簡寫LKP),就是說一個對象應當對其他對象有儘可能少的瞭解,不和陌生人說話。這樣就能有效降低耦合了。


特點:

1、只和“朋友”聯繫

2、就算是“朋友”也要少建立聯繫


用途:

降耦

實例分析:

1、只和“朋友”聯繫,那這裏的“朋友”是什麼呢?“朋友”是指成員變量、函數參數、或函數返回值!舉個例子:

客戶找裝修公司爲其裝修房子,裝修公司委派一名工人前去裝修。

class Worker
{
public:
	void Decorate();
};


class Company
{
public:
	Worker* regist();
};

class Clientele
{
public:
	void Decorate(const Company* com)
	{
		Worker* worker = com->regist();
		worker->Decorate();
	}
};
代碼中涉及到三個類裝修工人Worker、裝修公司Company、僱主Clientele。再來分析一下他們的關係Company是Clientele的“朋友”,Worker是Company的“朋友”,但Worker並非是Clientele的朋友。

有了上面的關係,不難看出,這段代碼違背了迪米特法則!因爲Clientele與非“朋友”類Worker有了聯繫!所以要對這段代碼進行修改:

class Worker
{
public:
	void Decorate();
};


class Company
{
public:
	void Decoreate()
	{
		Worker* worker = regist();
		worker->Decorate();
	}
	Worker* regist();
};

class Clientele
{
public:
	void Decorate(const Company* com)
	{
		com->Decorate();
	}
};
現在Clientele只和“朋友”Company聯繫,同樣Company只和“朋友”Worker聯繫。雖然滿足了迪米特法則的第一步,但仍然違背了第二步:和“朋友”也要少建立聯繫!再次對代碼進行修改,修改Company的regist方法的訪問級別

class Worker
{
public:
	void Decorate();
};


class Company
{
public:
	void Decoreate()
	{
		Worker* worker = regist();
		worker->Decorate();
	}

private:
	Worker* regist();
};

class Clientele
{
public:
	void Decorate(const Company* com)
	{
		com->Decorate();
	}
};
OK,到這裏爲止,就可以根據迪米特法則,將原方案中的耦合降到最低了!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章