迪米特法则(Law of Demeter,LoD)又称最少知识原则(Least Knowledge Principle,LKP),是一种面向对象编程设计原则,其核心思想是一个对象应该对其他对象保持最少的了解。迪米特法则要求一个对象应该仅与其直接关联的对象进行交互,而不是与间接关联的对象进行交互。这有助于降低系统的复杂性,提高模块的独立性,使代码更易于维护和扩展。
以下是5个迪米特法则的具体例子及其伪代码:
例子1:
一个班级有学生和老师,老师需要知道学生的总数。在这种情况下,老师只需要与班级对象交互,而不需要与每个学生对象交互。
伪代码:
class Student {
}
class Classroom {
List<Student> students;
int getStudentCount() {
return students.size();
}
}
class Teacher {
void printStudentCount(Classroom classroom) {
print(classroom.getStudentCount());
}
}
例子2:
一个购物车系统,顾客可以购买商品。顾客不需要知道库存的具体细节,只需要知道商品是否可用。
伪代码:
class Product {
boolean isAvailable() {
// Check availability
}
}
class Customer {
void buyProduct(Product product) {
if (product.isAvailable()) {
// Purchase product
}
}
}
例子3:
一个餐厅,顾客可以点餐。顾客不需要知道厨师如何制作菜肴,只需要知道菜单上的菜品。
伪代码:
class Dish {
}
class Menu {
List<Dish> dishes;
}
class Chef {
void cookDish(Dish dish) {
// Cook the dish
}
}
class Customer {
void orderDish(Menu menu, Chef chef) {
Dish dish = menu.selectDish();
chef.cookDish(dish);
}
}
例子4:
一个电影院,顾客可以购买电影票。顾客不需要知道如何打印电影票,只需要知道购票窗口。
伪代码:
class Ticket {
}
class TicketBooth {
Ticket printTicket() {
// Print ticket
}
}
class Customer {
void buyTicket(TicketBooth ticketBooth) {
Ticket ticket = ticketBooth.printTicket();
}
}
例子5:
一个图书馆,读者可以借阅图书。读者不需要知道如何管理图书,只需要知道如何查找和借阅图书。
伪代码:
class Book {
}
class Library {
List<Book> books;
Book findBook(String title) {
// Find book by title
}
void lendBook(Book book) {
// Lend book
}
}
class Reader {
void borrowBook(Library library, String title) {
Book book = library.findBook(title);
library.lendBook(book);
}
}