迪米特原則 - Least Knowledge Principle - LKP

定義: 一個類應該對其他類保持最少的瞭解。
釋義: 只有直接的朋友通信。
直接的朋友:出現在成員變量,方法參數,方法返回值中的類。出現在局部變量中的類則不是直接朋友。
舉例:如校長想知道學校全體同學的名字,只需與各班主任溝通就行,無需與所有同學溝通
學生類

#include <string>
class Student
{
public:
	Student(std::string name);
	Student(const Student &st); // 因爲使用vector和string, 需實現拷貝構造函數
	~Student();

	void showName();   // 顯示名稱
	
private:
	std::string name;
};

班主任類

#include <string>
#include <vector>
#include "Student.h"
// 班主任類
class HeadTeacher
{
public:
	HeadTeacher(std::string name);
	HeadTeacher(const HeadTeacher &ht); // 因爲使用vector和string, 需實現拷貝構造函數
	~HeadTeacher();
	
	void addStudent(Student st);   // 添加同學
	void showStudentName();        // 顯示所有同學名字
private:
	std::string name;
	std::vector<Student> students;  // 保存學生
};

校長類

#include <string>
#include <vector>
#include "HeadTeacher.h"
class HeadMaster
{
public:
	HeadMaster(std::string name);
	~HeadMaster();

	void addHeadTeacher(HeadTeacher ht);
	void showAllStudentName();

private:
	std::string name;
	std::vector<HeadTeacher> headTeachers;  // 保存班主任
};

客戶端

#include "HeadMaster.h"

int main(int agrc, char* argv[])
{
	// 生成學生
	Student stW1("Wang1");
	Student stW2("Wang2");
	Student stW3("Wang3");
	Student stW4("Wang4");
	Student stL1("Li1");
	Student stL2("Li1");

	// 生成班主任
	HeadTeacher htW("Wang");
	HeadTeacher htL("Li");

	// 生成校長
	HeadMaster hm("Zhang");

	// 分配學生給班主任
	htW.addStudent(stW1);
	htW.addStudent(stW3);
	htW.addStudent(stL1);
	htW.addStudent(stL2);
	htL.addStudent(stW2);
	htL.addStudent(stW4);

	// 分配版主任給校長
	hm.addHeadTeacher(htW);
	hm.addHeadTeacher(htL);

	// 輸出全校學生名稱
	hm.showAllStudentName();

	getchar();
	return 0;
}

運行結果
在這裏插入圖片描述
源碼地址

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