您的位置:首页 > 其它

设计模式六大原则----------迪米特法则

2014-03-26 13:57 274 查看
设计模式总览

迪米特法则(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,到这里为止,就可以根据迪米特法则,将原方案中的耦合降到最低了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: