设计模式——迪米特法则

在游戏玩家寻找自己喜欢的游戏类型的场景中,程序员往往会这样设计客户端:

class Game
{
public:
	virtual void result() = 0;
};
class Game1:public Game
{
public:
	Game1()
	{
		_name = "黑暗之魂";
		_Type = "魂类";
	}
	virtual void result()
	{
		cout << _name << endl;
	}
	string _Type;
	string _name;
};
class Game2 :public Game
{
public:
	Game2()
	{
		_name = "原神";
		_Type = "开放世界";
	}
	virtual void result()
	{
		cout << _name << endl;
	}
	string _Type;
	string _name;
};
void test2()
{
	Game1* g1 = new Game1();
	Game2* g2 = new Game2();
	if (g1->_Type == "魂类")
		g1->result();
	if (g2->_Type == "魂类")
		g2->result();
}
int main()
{
	test2();
	return 0;
}

但是这样设计不是最佳。因为定义一个对象应该对其他对象保持最少的了解。 狭义的迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。 如果其中一个类需要调用另一类的某一个方法的话,可以通过第三者转发这个调用。 广义的迪米特法则:一个模块设计的好坏的一个重要标志就是该模块在多大程度上讲自己的内部数据与实现的有关细节隐藏起来。换言之:我不需要与每个类进行打交道,我只关心最终给我返回的结果:

class Game
{
public:
	virtual void result() = 0;
	virtual string gettype() = 0;
};
class Game1:public Game
{
public:
	Game1()
	{
		_name = "黑暗之魂";
		_Type = "魂类";
	}
	virtual void result()
	{
		cout << _name << endl;
	}
	virtual string gettype()
	{
		return _Type;
	}
	string _Type;
	string _name;
};
class Game2 :public Game
{
public:
	Game2()
	{
		_name = "原神";
		_Type = "开放世界";
	}
	virtual void result()
	{
		cout << _name << endl;
	}
	virtual string gettype()
	{
		return _Type;
	}
	string _Type;
	string _name;
};
class mediator
{
public:
	mediator()
	{
		Game1* g1 = new Game1();
		_v.push_back(g1);
		Game2* g2 = new Game2();
		_v.push_back(g2);
	}
	~mediator()
	{
		for (auto& it : _v)
		{
			delete it;
		}
	}
	void findGame(string need)
	{
		for (auto& it : _v)
		{
			if ((*it).gettype() == need)
			{
				(*it).result();
			}
		}
	}
	vector<Game*> _v;
};
void test2()
{
	mediator* me = new mediator();
	me->findGame("魂类");
	me->findGame("开放世界");
}
int main()
{
	test2();
	return 0;
}

相关推荐

  1. 设计模式——法则

    2024-03-16 20:34:02       22 阅读
  2. 设计模式-开闭原则和法则

    2024-03-16 20:34:02       18 阅读
  3. 法则

    2024-03-16 20:34:02       14 阅读
  4. 法则

    2024-03-16 20:34:02       23 阅读
  5. 设计模式法则(Law of Demeter,LoD)介绍

    2024-03-16 20:34:02       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-16 20:34:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-16 20:34:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-16 20:34:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-16 20:34:02       18 阅读

热门阅读

  1. 解决Linux下网络连接问题

    2024-03-16 20:34:02       16 阅读
  2. C++(3/13)

    C++(3/13)

    2024-03-16 20:34:02      19 阅读
  3. 约定式提交 commit 规范

    2024-03-16 20:34:02       18 阅读
  4. 详解uniapp的生命周期

    2024-03-16 20:34:02       18 阅读
  5. nicetool--替代hutool和fastjson的工具库

    2024-03-16 20:34:02       21 阅读
  6. “趣说“Sybase ASE中有关字段大小计算

    2024-03-16 20:34:02       19 阅读
  7. vue路由的钩子函数?

    2024-03-16 20:34:02       21 阅读
  8. rocketMQ的基本认识

    2024-03-16 20:34:02       20 阅读