-
C#教程之C#教程之使用C# (.NET Core) 实现迭代器设计模式 ((2)
本站最新发布 C#从入门到精通
试听地址 https://www.xin3721.com/eschool/CSharpxin3721/
public Hashtable MenuItems { get; } = new Hashtable(); public CafeMenu() { AddItem("Veggie Burger and Air Fries", "Veggie burger on a whole wheat bun, lettuce, tomato, and fries", true, 3.99); AddItem("Soup of the day", "A cup of the soup of the day, with a side salad", false, 3.69); AddItem("Burrito", "A large burrito, with whole pinto beans, salsa, guacamole", true, 4.29); } public IEnumerator CreateIEnumerator() { return MenuItems.GetEnumerator(); } public void AddItem(string name, string description, bool vegetarian, double price) { var menuItem = new MenuItem(name, description, vegetarian, price); MenuItems.Add(menuItem.Name, menuItem); } } }
试听地址 https://www.xin3721.com/eschool/CSharpxin3721/
public Hashtable MenuItems { get; } = new Hashtable(); public CafeMenu() { AddItem("Veggie Burger and Air Fries", "Veggie burger on a whole wheat bun, lettuce, tomato, and fries", true, 3.99); AddItem("Soup of the day", "A cup of the soup of the day, with a side salad", false, 3.69); AddItem("Burrito", "A large burrito, with whole pinto beans, salsa, guacamole", true, 4.29); } public IEnumerator CreateIEnumerator() { return MenuItems.GetEnumerator(); } public void AddItem(string name, string description, bool vegetarian, double price) { var menuItem = new MenuItem(name, description, vegetarian, price); MenuItems.Add(menuItem.Name, menuItem); } } }
菜单的迭代器:
using System; using System.Collections; using IteratorPattern.Menus; namespace IteratorPattern.MenuIterators { public class DinerMenuIterator: IEnumerator { private readonly MenuItem[] _menuItems; private int _position = -1; public DinerMenuIterator(MenuItem[] menuItems) { _menuItems = menuItems; } public bool MoveNext() { _position++; if (_position >= _menuItems.Length || _menuItems[_position] == null) { return false; } return true; } public void Reset() { _position = -1; } public object Current => _menuItems[_position]; } }
using System.Collections; using System.Collections.Generic; namespace IteratorPattern.MenuIterators { public class PancakeHouseMenuIterator : IEnumerator { private readonly ArrayList _menuItems; private int _position = -1; public PancakeHouseMenuIterator(ArrayList menuItems) { _menuItems = menuItems; } public bool MoveNext() { _position++; if (_position >= _menuItems.Count || _menuItems[_position] == null) { return false; } return true; } public void Reset() { _position = -1; } public object Current => _menuItems[_position]; } }
服务员:
using System; using System.Collections; using IteratorPattern.Abstractions; using IteratorPattern.Menus; namespace IteratorPattern.Waitresses { public class Waitress { private readonly ArrayList _menus; public Waitress(ArrayList menus) { _menus = menus; } public void PrintMenu() { var menuIterator = _menus.GetEnumerator(); while (menuIterator.MoveNext()) { var menu = menuIterator.Current as IMenu; PrintMenu(menu?.CreateIEnumerator()); } } private void PrintMenu(IEnumerator iterator) { while (iterator.MoveNext()) { if (iterator.Current != null) { MenuItem menuItem; if (iterator.Current is MenuItem item) { menuItem = item; } else { menuItem = ((DictionaryEntry)iterator.Current).Value as MenuItem; } Console.Write($"{menuItem?.Name}, "); Console.Write($"{menuItem?.Price} -- "); Console.WriteLine($"{menuItem?.Description}"); } } Console.WriteLine(); } } }
测试:
static void MenuTestDriveUsingIEnumerator() { var pancakeHouseMenu = new PancakeHouseMenu(); var dinerMenu = new DinerMenu(); var cafeMenu = new CafeMenu(); var waitress = new Waitress(new ArrayList(3) { pancakeHouseMenu, dinerMenu, cafeMenu }); waitress.PrintMenu(); }
深入浅出设计模式的C#实现的代码: https://github.com/solenovex/Head-First-Design-Patterns-in-CSharp
这篇先到这, 本章涉及到组合模式, 下篇文章再写.
栏目列表
最新更新
如何使用OS模块中的stat方法
Python os 模块
seek() 方法
python打开文件实例1
Python写入文件
什么是流?
文件操作如何进制逐行读取
Python相对路径
with创建临时运行环境
Python文件操作
.Net Standard(.Net Core)实现获取配置信息
Linux PXE + Kickstart 自动装机
Shell 编程 基础
Shell 编程 条件语句
CentOS8-网卡配置及详解
Linux中LVM逻辑卷管理
1.数码相框-相框框架分析(1)
Ubuntu armhf 版本国内源
Linux中raid磁盘阵列
搭建简易网站
access教程之Access简介
mysql 安装了最新版本8.x版本后的报错:
Mysql空间数据&空间索引(spatial)
如何远程连接SQL Server数据库的图文教程
复制SqlServer数据库的方法
搜索sql语句
sql中返回参数的值
sql中生成查询的模糊匹配字符串
数据定义功能
数据操作功能