全文目录:
-
- 开篇语
- 目录
- 前言:设计模式的奥秘🤔
- [迭代器模式:你的数据管家 📜](#迭代器模式:你的数据管家 📜)
- [访问者模式:行为的游牧者 🌍](#访问者模式:行为的游牧者 🌍)
- [迭代器模式 VS 访问者模式 🔍](#迭代器模式 VS 访问者模式 🔍)
- [总结:掌握设计模式的小贴士 🎓](#总结:掌握设计模式的小贴士 🎓)
- 文末
开篇语
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。
小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!
目录
- 前言:设计模式的奥秘🤔
- [迭代器模式:你的数据管家 📜](#迭代器模式:你的数据管家 📜)
- [访问者模式:行为的游牧者 🌍](#访问者模式:行为的游牧者 🌍)
- [迭代器模式 VS 访问者模式 🔍](#迭代器模式 VS 访问者模式 🔍)
- [总结:掌握设计模式的小贴士 🎓](#总结:掌握设计模式的小贴士 🎓)
前言:设计模式的奥秘🤔
如果你是软件开发者,一定听过"设计模式"这个词。没错!它们就是那些在代码中重复出现的"套路",是我们程序员解题的小法宝。但设计模式就像是武林秘籍,需要深刻理解后才能运用自如。本篇文章将深入探讨两种行为型设计模式:迭代器模式 和访问者模式。无论是管理数据集合,还是处理不同对象的操作,这两种模式都有它们独特的优势。准备好了吗?让我们一起来探索这些模式的精髓吧!
迭代器模式:你的数据管家 📜
什么是迭代器模式?
迭代器模式(Iterator Pattern)是一种行为型设计模式,提供了一种可以顺序访问集合对象内部元素的方法,而无需暴露该集合的内部表示。想象一下,你有一堆书,但你不想自己一本本翻阅,而是请了一个图书管理员,他帮你一本一本地递给你,这就是迭代器模式的本质!
迭代器模式的核心要点
- 提供统一的访问接口:不需要了解集合内部结构,即可逐个访问元素。
- 解耦集合和遍历算法:遍历算法和集合本身分离,符合"单一职责原则"。
- 支持不同类型的集合:无论是数组、列表还是树结构,都可以实现迭代器。
迭代器模式的实现示例
我们来用Java实现一个简单的迭代器模式。假设我们有一个"书架"集合,并希望可以通过迭代器来遍历其中的书籍:
java
// 书籍类
class Book {
private String title;
public Book(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
}
// 迭代器接口
interface Iterator {
boolean hasNext();
Object next();
}
// 书架类
class BookShelf {
private List<Book> books = new ArrayList<>();
public void addBook(Book book) {
books.add(book);
}
public Iterator iterator() {
return new BookShelfIterator(this);
}
public List<Book> getBooks() {
return books;
}
}
// 书架的迭代器
class BookShelfIterator implements Iterator {
private BookShelf bookShelf;
private int index;
public BookShelfIterator(BookShelf bookShelf) {
this.bookShelf = bookShelf;
this.index = 0;
}
public boolean hasNext() {
return index < bookShelf.getBooks().size();
}
public Book next() {
return bookShelf.getBooks().get(index++);
}
}
使用这个迭代器,我们可以这样遍历书架:
java
BookShelf bookShelf = new BookShelf();
bookShelf.addBook(new Book("设计模式"));
bookShelf.addBook(new Book("算法导论"));
Iterator iterator = bookShelf.iterator();
while (iterator.hasNext()) {
Book book = (Book) iterator.next();
System.out.println("书名:" + book.getTitle());
}
迭代器模式的优缺点
优点:
- 简化集合对象的遍历,解耦了数据结构和遍历逻辑。
- 可以提供多种遍历方式,扩展性好。
缺点:
- 增加了类的数量,代码可能变得复杂。
- 不支持反向遍历(需要额外实现)。
访问者模式:行为的游牧者 🌍
什么是访问者模式?
访问者模式(Visitor Pattern)是一种行为型设计模式,用于在不修改现有类的前提下,向这些类添加新的操作。它允许我们定义新的操作,而无需更改每个对象的类结构。举个例子,如果你是考古学家,博物馆里的文物就是你的对象,而考古学家的各种研究手段就是"访问者",不同的研究手段作用于同样的文物,就能得出不同的结论。
访问者模式的核心要点
- 分离操作和数据结构:访问者模式将数据结构与行为分离,使得新的行为可以独立扩展。
- 双重分派:访问者模式依赖于双重分派,即由具体的元素决定访问者该执行什么操作。
- 新增操作不影响数据结构:不需要修改数据结构即可添加新的操作。
访问者模式的实现示例
假设我们有一组不同类型的电脑硬件(CPU、显卡等),我们希望能对这些硬件执行不同的操作,如检查性能、获取价格等。这时就可以用访问者模式:
java
// 访问者接口
interface Visitor {
void visit(CPU cpu);
void visit(GPU gpu);
}
// 硬件接口
interface Hardware {
void accept(Visitor visitor);
}
// CPU类
class CPU implements Hardware {
public void accept(Visitor visitor) {
visitor.visit(this);
}
public String getCPUName() {
return "Intel i7";
}
}
// GPU类
class GPU implements Hardware {
public void accept(Visitor visitor) {
visitor.visit(this);
}
public String getGPUName() {
return "NVIDIA GTX 3080";
}
}
// 性能检查访问者
class PerformanceVisitor implements Visitor {
public void visit(CPU cpu) {
System.out.println("检查CPU性能: " + cpu.getCPUName());
}
public void visit(GPU gpu) {
System.out.println("检查GPU性能: " + gpu.getGPUName());
}
}
使用访问者模式,我们可以很方便地添加新的操作而不影响硬件类本身:
java
Hardware cpu = new CPU();
Hardware gpu = new GPU();
Visitor performanceVisitor = new PerformanceVisitor();
cpu.accept(performanceVisitor);
gpu.accept(performanceVisitor);
访问者模式的优缺点
优点:
- 符合开闭原则,新增操作不影响原有数据结构。
- 简化了复杂对象结构中不同操作的添加。
缺点:
- 对于增加新的数据结构不友好,需要修改每个访问者。
- 破坏了封装性,访问者可能需要访问对象的内部细节。
迭代器模式 VS 访问者模式 🔍
迭代器模式和访问者模式虽然都是行为型模式,但解决的问题截然不同。迭代器模式关注的是如何遍历数据集合 ,而访问者模式则关心如何在不修改类结构的情况下添加新操作。可以说,迭代器模式是你的"数据管家",而访问者模式是你数据的"行为游牧者"。
总结:掌握设计模式的小贴士 🎓
设计模式的学习不是一蹴而就的,它需要我们在实际开发中不断应用和总结。迭代器模式帮助我们优雅地遍历集合,而访问者模式则为复杂对象结构中的操作扩展提供了便捷。掌握这些模式,可以让你的代码更具弹性和复用性,真正成为开发中的"小助手"!
希望通过本文,你对迭代器模式和访问者模式有了更深的理解。设计模式的世界还很大,我们一起探索吧!
... ...
文末
好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。
... ...
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!
wished for you successed !!!
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。