当前位置: 首页 > wzjs >正文

统一门户网站建设规范购物网站建设的选题意义

统一门户网站建设规范,购物网站建设的选题意义,长沙可以做网站的公司,邢台核酸检测点迭代器与组合模式:遍历与管理的艺术 在《Head First 设计模式》中,**迭代器模式(Iterator Pattern)和组合模式(Composite Pattern)**是两个非常重要的设计模式。迭代器模式帮助我们遍历集合中的元素&#…

迭代器与组合模式:遍历与管理的艺术

在《Head First 设计模式》中,**迭代器模式(Iterator Pattern)组合模式(Composite Pattern)**是两个非常重要的设计模式。迭代器模式帮助我们遍历集合中的元素,而组合模式则帮助我们管理树形结构的对象。这两种模式在实际开发中有着广泛的应用,尤其是在JDK和Spring等框架中。今天,我们将通过书中的内容,结合代码示例,来深入理解这两种模式。

在这里插入图片描述


迭代器模式:遍历集合的艺术

迭代器模式的定义是:

提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。

简单来说,迭代器模式将遍历集合的责任从集合类中分离出来,交给一个独立的迭代器对象。这样,集合类可以专注于管理元素,而迭代器类可以专注于遍历元素。

迭代器模式的核心思想

  1. 分离遍历与集合:将遍历集合的逻辑从集合类中分离出来,交给迭代器类。
  2. 统一的遍历接口:通过统一的接口(如 Iterator),可以遍历不同类型的集合。

代码示例:迭代器模式

我们通过一个简单的例子来理解迭代器模式。假设我们有一个菜单系统,包含两个菜单:PancakeHouseMenuDinerMenu。我们希望遍历这两个菜单中的所有菜品。

定义菜单项

class MenuItem {String name;double price;MenuItem(String name, double price) {this.name = name;this.price = price;}public String getName() {return name;}public double getPrice() {return price;}
}

定义菜单

import java.util.ArrayList;
import java.util.List;class PancakeHouseMenu {private List<MenuItem> menuItems;PancakeHouseMenu() {menuItems = new ArrayList<>();addItem("K&B's Pancake Breakfast", 2.99);addItem("Regular Pancake Breakfast", 2.99);addItem("Blueberry Pancakes", 3.49);}void addItem(String name, double price) {menuItems.add(new MenuItem(name, price));}Iterator<MenuItem> createIterator() {return menuItems.iterator();}
}class DinerMenu {private static final int MAX_ITEMS = 6;private int numberOfItems = 0;private MenuItem[] menuItems;DinerMenu() {menuItems = new MenuItem[MAX_ITEMS];addItem("Vegetarian BLT", 2.99);addItem("BLT", 2.99);addItem("Soup of the day", 3.29);}void addItem(String name, double price) {if (numberOfItems >= MAX_ITEMS) {System.out.println("Sorry, menu is full!");} else {menuItems[numberOfItems] = new MenuItem(name, price);numberOfItems++;}}Iterator<MenuItem> createIterator() {return new DinerMenuIterator(menuItems);}
}

定义迭代器

import java.util.Iterator;class DinerMenuIterator implements Iterator<MenuItem> {private MenuItem[] items;private int position = 0;DinerMenuIterator(MenuItem[] items) {this.items = items;}@Overridepublic boolean hasNext() {return position < items.length && items[position] != null;}@Overridepublic MenuItem next() {MenuItem menuItem = items[position];position++;return menuItem;}
}

测试代码

public class MenuTest {public static void main(String[] args) {PancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu();DinerMenu dinerMenu = new DinerMenu();Iterator<MenuItem> pancakeIterator = pancakeHouseMenu.createIterator();Iterator<MenuItem> dinerIterator = dinerMenu.createIterator();System.out.println("MENU\n----\nBREAKFAST");printMenu(pancakeIterator);System.out.println("\nLUNCH");printMenu(dinerIterator);}private static void printMenu(Iterator<MenuItem> iterator) {while (iterator.hasNext()) {MenuItem menuItem = iterator.next();System.out.println(menuItem.getName() + ", " + menuItem.getPrice());}}
}

输出结果:

MENU
----
BREAKFAST
K&B's Pancake Breakfast, 2.99
Regular Pancake Breakfast, 2.99
Blueberry Pancakes, 3.49LUNCH
Vegetarian BLT, 2.99
BLT, 2.99
Soup of the day, 3.29

组合模式:管理树形结构的艺术

组合模式的定义是:

将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

简单来说,组合模式允许我们将对象组合成树形结构,并且可以像处理单个对象一样处理整个树形结构。

组合模式的核心思想

  1. 统一叶子节点和组合节点:叶子节点和组合节点实现相同的接口,用户可以一致地处理它们。
  2. 递归结构:组合节点可以包含其他组合节点或叶子节点,形成递归结构。

代码示例:组合模式

我们通过一个简单的例子来理解组合模式。假设我们有一个菜单系统,菜单可以包含子菜单和菜单项。

定义组件接口

interface MenuComponent {void print();
}

定义叶子节点(菜单项)

class MenuItem implements MenuComponent {private String name;private double price;MenuItem(String name, double price) {this.name = name;this.price = price;}@Overridepublic void print() {System.out.println(name + ", " + price);}
}

定义组合节点(菜单)

import java.util.ArrayList;
import java.util.List;class Menu implements MenuComponent {private String name;private List<MenuComponent> menuComponents = new ArrayList<>();Menu(String name) {this.name = name;}void add(MenuComponent menuComponent) {menuComponents.add(menuComponent);}@Overridepublic void print() {System.out.println("\n" + name);System.out.println("---------------------");for (MenuComponent menuComponent : menuComponents) {menuComponent.print();}}
}

测试代码

public class MenuTest {public static void main(String[] args) {MenuComponent pancakeHouseMenu = new Menu("PANCAKE HOUSE MENU");pancakeHouseMenu.add(new MenuItem("K&B's Pancake Breakfast", 2.99));pancakeHouseMenu.add(new MenuItem("Regular Pancake Breakfast", 2.99));MenuComponent dinerMenu = new Menu("DINER MENU");dinerMenu.add(new MenuItem("Vegetarian BLT", 2.99));dinerMenu.add(new MenuItem("BLT", 2.99));MenuComponent allMenus = new Menu("ALL MENUS");allMenus.add(pancakeHouseMenu);allMenus.add(dinerMenu);allMenus.print();}
}

输出结果:

ALL MENUS
---------------------PANCAKE HOUSE MENU
---------------------
K&B's Pancake Breakfast, 2.99
Regular Pancake Breakfast, 2.99DINER MENU
---------------------
Vegetarian BLT, 2.99
BLT, 2.99

迭代器与组合模式在JDK和Spring中的应用

1. JDK中的迭代器模式

JDK中的 java.util.Iterator 接口是迭代器模式的典型实现。例如,ArrayListHashSet 都提供了 iterator() 方法,用于返回一个迭代器对象。

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {System.out.println(iterator.next());
}

2. Spring中的组合模式

Spring框架中的 org.springframework.core.io.Resource 接口是组合模式的典型实现。Resource 接口既可以表示单个资源(如文件),也可以表示多个资源(如目录)。

Resource resource = new FileSystemResource("file.txt");
System.out.println(resource.getFilename());

总结

迭代器模式和组合模式是两个非常重要的设计模式。迭代器模式帮助我们遍历集合中的元素,而组合模式则帮助我们管理树形结构的对象。这两种模式在实际开发中有着广泛的应用,尤其是在JDK和Spring等框架中。

通过《Head First 设计模式》中的内容,我们深入理解了这两种模式的核心思想,并通过代码示例掌握了它们的实际应用。希望这篇文章能帮助你更好地理解迭代器模式和组合模式,并在实际开发中灵活运用它们!


互动话题:你在实际开发中使用过迭代器模式或组合模式吗?欢迎在评论区分享你的经验和心得!


文章转载自:

http://5Wqa5dox.ydxwj.cn
http://7xIIym4U.ydxwj.cn
http://0I3PPEZO.ydxwj.cn
http://DNJhEYmS.ydxwj.cn
http://BxuGaFB3.ydxwj.cn
http://akNhVqvb.ydxwj.cn
http://zUqaZzv8.ydxwj.cn
http://OcIHKeQV.ydxwj.cn
http://WEGWgq9l.ydxwj.cn
http://9iputZpU.ydxwj.cn
http://knxZjOsh.ydxwj.cn
http://Vszsc5x7.ydxwj.cn
http://hRd2xgRv.ydxwj.cn
http://g7uhG8mo.ydxwj.cn
http://LZY1s5ny.ydxwj.cn
http://japVIxvj.ydxwj.cn
http://3tArVUJk.ydxwj.cn
http://AWNf12aY.ydxwj.cn
http://OjZ4kITP.ydxwj.cn
http://yx6JRTbA.ydxwj.cn
http://mLyf2Go1.ydxwj.cn
http://UzEGtJo4.ydxwj.cn
http://XZkf58es.ydxwj.cn
http://5IMTLk2c.ydxwj.cn
http://2OYbnL9V.ydxwj.cn
http://OgC6jwyx.ydxwj.cn
http://S0b0Psbu.ydxwj.cn
http://D2P7nzqF.ydxwj.cn
http://IgVM39Of.ydxwj.cn
http://rw8tuQxd.ydxwj.cn
http://www.dtcms.com/wzjs/709239.html

相关文章:

  • 做网站需要提供什么条件wordpress标题截断
  • 自己做网站卖产品怎么样腾讯微博做网站外链步骤
  • 行业网站程序江苏城市建设职业学院网站
  • 要加强网站内容的建设网站外部链接添加方式
  • 公司网站建设多少费用项目加盟网
  • 网站扒皮下载后怎么做店铺设计装修
  • 上海网站推广公司排名高端网站建设方案报价
  • 做青蛙网站wordpress 模板制作教程
  • 重庆建设银行网站网站开发好学吗
  • html网站地图模板俄罗斯网站制作
  • 深圳定制建设网站磁力搜索器 磁力猫
  • 网站 目录访问江苏商城网站建设
  • dede网站栏目管理如何建设seo网站提交提交
  • 网站登录不上为何网站不被百度收录
  • 如何在云服务器上搭建网站seo技巧课程
  • 最好的购物网站wordpress代码混乱
  • 做网站的工具怎么使用站长工具域名解析
  • 汕头网站快速优化排名两个网站做响应式网站
  • 凡科手机网站建设开发百度官网认证
  • 做网站游戏总结的例文免费注册网站云空间
  • 网站后台扫描插件连锁加盟网站制作
  • 阿里企业网站建设评估免费的室内设计网站
  • 平台电商网站开发网站实现步骤及方法是
  • 深圳开发网站的公司哪家好关于美食网站的问卷调查怎么做
  • 公司网站开发招标书网络营销员是干嘛的
  • 美文网站源码软件工程师薪资待遇
  • wap网站快速开发班级网站自助建设功能
  • 廊坊网站建设品牌营销网络是指公司在国内外寻找战略伙伴和同盟者
  • 电商直播平台网站开发宝马itms做课网站
  • 做外墙资料的网站深圳市福田区香蜜湖街道