传统网站有没有建设必要性,wordpress文章全部展示,网址大全123介绍,电脑有网但浏览器打不开网页迪米特法则#xff0c;也称为最少知识原则#xff08;Law of Demeter#xff09;#xff0c;是面向对象设计中的一个原则#xff0c;旨在降低对象之间的耦合性#xff0c;提高系统的可维护性和可扩展性。该原则强调一个类不应该直接与其它不相关的类相互交互#xff0c;…迪米特法则也称为最少知识原则Law of Demeter是面向对象设计中的一个原则旨在降低对象之间的耦合性提高系统的可维护性和可扩展性。该原则强调一个类不应该直接与其它不相关的类相互交互而是通过少数几个密切相关的类来进行通信。这有助于减少类之间的依赖关系降低代码的耦合性使得系统更加灵活和易于维护。 迪米特法则的核心思想可以概括为以下几点
一个对象应该尽量少地了解其他对象的内部结构和实现。一个对象只与其直接朋友即与其关联最密切的对象进行交互。避免在一个类中引入不必要的依赖关系尽量保持类之间的解耦。
以下是一个示例代码来说明迪米特法则 假设我们有一个电商系统包含了顾客Customer、订单Order和商品Product这三个类。
class Product {private String name;private double price;public Product(String name, double price) {this.name name;this.price price;}public double getPrice() {return price;}
}class Order {private ListProduct products new ArrayList();public void addProduct(Product product) {products.add(product);}public double calculateTotalPrice() {double totalPrice 0;for (Product product : products) {totalPrice product.getPrice();}return totalPrice;}
}class Customer {private ListOrder orders new ArrayList();public void addOrder(Order order) {orders.add(order);}public void printTotalSpent() {double totalSpent 0;for (Order order : orders) {totalSpent order.calculateTotalPrice();}System.out.println(Total amount spent: totalSpent);}
}在这个示例中迪米特法则的考虑并不充分。例如在Customer类的printTotalSpent方法中我们直接访问了Order类的内部结构和Product类的内部结构。这会导致Customer类与Order类和Product类之间存在紧耦合的关系违反了迪米特法则。
符合迪米特法则的改进示例
class Product {private String name;private double price;public Product(String name, double price) {this.name name;this.price price;}public double getPrice() {return price;}
}class Order {private ListProduct products new ArrayList();public void addProduct(Product product) {products.add(product);}public double calculateTotalPrice() {double totalPrice 0;for (Product product : products) {totalPrice product.getPrice();}return totalPrice;}
}class Customer {private ListOrder orders new ArrayList();public void addOrder(Order order) {orders.add(order);}public double calculateTotalSpent() {double totalSpent 0;for (Order order : orders) {totalSpent order.calculateTotalPrice();}return totalSpent;}
}class ShoppingCart {private ListProduct products new ArrayList();public void addProduct(Product product) {products.add(product);}public double calculateTotalPrice() {double totalPrice 0;for (Product product : products) {totalPrice product.getPrice();}return totalPrice;}
}在改进后的示例中Customer类不再直接与Order类和Product类的内部结构交互而是通过添加一个calculateTotalSpent方法来计算总花费。同时引入了ShoppingCart类来管理购物车中的商品避免了Customer类与Product类的直接交互。