欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 超详细超实用!!!AI编程之cursor编写设计模式迪米特法则实例(八)

超详细超实用!!!AI编程之cursor编写设计模式迪米特法则实例(八)

2024/10/25 10:30:36 来源:https://blog.csdn.net/qq_43206280/article/details/142518830  浏览:    关键词:超详细超实用!!!AI编程之cursor编写设计模式迪米特法则实例(八)

云风网
云风笔记
云风知识库

一、设计模式迪米特法则定义

只与你的直接朋友交谈,不跟“陌生人”说话
其含义是:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。

迪米特法则中的“朋友”是指:当前对象本身、当前对象的成员对象、当前对象所创建的对象、当前对象的方法参数等,这些对象同当前对象存在关联、聚合或组合关系,可以直接访问这些对象的方法。

二 、原则作用

  1. 迪米特法则要求限制软件实体之间通信的宽度和深度。
  2. 降低了类之间的耦合度,提高了模块的相对独立性。 由于亲合度降低,从而提高了类的可复用率和系统的扩展性。
  3. 但是,过度使用迪米特法则会使系统产生大量的中介类,从而增加系统的复杂性,使模块之间的通信效率降低。所以,在釆用迪米特法则时需要反复权衡,确保高内聚和低耦合的同时,保证系统的结构清晰。

三、原则实现实例

从迪米特法则的定义和特点可知,它强调以下两点:

从依赖者的角度来说,只依赖应该依赖的对象。

从被依赖者的角度说,只暴露应该暴露的方法。

所以,在运用迪米特法则时要注意以下六点。

  1. 在类的划分上,应该创建弱耦合的类。类与类之间的耦合越弱,就越有利于实现可复用的目标。
  2. 在类的结构设计上,尽量降低类成员的访问权限。
  3. 在类的设计上,优先考虑将一个类设置成不变类。
  4. 在对其他类的引用上,将引用其他对象的次数降到最低。
  5. 不暴露类的属性成员,而应该提供相应的访问器(set 和 get 方法)。
  6. 谨慎使用序列化(Serializable)功能。
1、新建main.java空白文件,cursor输入指令

在这里插入图片描述
在这里插入图片描述

2、自动生成代码以及文件
2.1、Main.java代码如下:
public class Main {public static void main(String[] args) {LibrarySystem library = new LibrarySystem();// Adding books to the cataloglibrary.addBookToCatalog(new Book("The Great Gatsby", "F. Scott Fitzgerald"));library.addBookToCatalog(new Book("To Kill a Mockingbird", "Harper Lee"));library.addBookToCatalog(new Book("1984", "George Orwell"));System.out.println("\n--- Library Transactions ---");// Creating library membersLibraryMember member1 = new LibraryMember("Alice", 1001);LibraryMember member2 = new LibraryMember("Bob", 1002);// Borrowing bookslibrary.borrowBook(member1, "The Great Gatsby");library.borrowBook(member2, "1984");library.borrowBook(member1, "Moby Dick");}
}
2.2、LibrarySystem.java代码如下:

LibrarySystem 类只与 Catalog、Book 和 LibraryMember 直接交互,而不需要了解这些类的内部实现细节。

public class LibrarySystem {private Catalog catalog;public LibrarySystem() {this.catalog = new Catalog();}public void addBookToCatalog(Book book) {catalog.addBook(book);System.out.println("Added book: " + book.getTitle() + " by " + book.getAuthor());}public void borrowBook(LibraryMember member, String bookTitle) {if (catalog.isBookAvailable(bookTitle)) {Book book = catalog.findBook(bookTitle);System.out.println(member.getName() + " (ID: " + member.getMemberId() + ") borrowed: " + book.getTitle());} else {System.out.println("Sorry, " + bookTitle + " is not available.");}}
}
2.3、LibraryMember.java代码如下:
public class LibraryMember {private String name;private int memberId;public LibraryMember(String name, int memberId) {this.name = name;this.memberId = memberId;}public String getName() {return name;}public int getMemberId() {return memberId;}
}
2.4、Catalog.java代码如下:

Catalog 类封装了对书籍的管理,LibrarySystem 不需要直接操作书籍列表。

import java.util.ArrayList;
import java.util.List;public class Catalog {private List<Book> books = new ArrayList<>();public void addBook(Book book) {books.add(book);}public boolean isBookAvailable(String title) {return books.stream().anyMatch(book -> book.getTitle().equals(title));}public Book findBook(String title) {return books.stream().filter(book -> book.getTitle().equals(title)).findFirst().orElse(null);}
}
2.5、Book .java代码如下:
public class Book {private String title;private String author;public Book(String title, String author) {this.title = title;this.author = author;}public String getTitle() {return title;}public String getAuthor() {return author;}
}
3、运行主程序输出

在这里插入图片描述
这个输出直观地展示了图书馆系统的运作,同时遵循了迪米特法则。每个类只与其直接相关的类交互,减少了类之间的耦合。例如,LibrarySystem 不需要知道 Catalog 是如何存储和查找书籍的,它只需要调用相应的方法即可。

通过这种方式,如果 Catalog 类的实现发生变化(比如改变存储方式),只需要修改 Catalog 类本身,而 LibrarySystem 不需要改变。这提高了系统的灵活性和可维护性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com