- 浏览: 202338 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
yixinhu:
你好 能加下你的QQ么 我怎么打出来的exe点击都没反应啊.. ...
java 生成exe 文件 -
chenxiang105:
如果不需要flash 只需要做图片的翻页效果 这个是否也合适类 ...
jQuery插件page peel AD实现动态卷页、翻页或卷角flash广告效果 -
tuoxie007:
幸苦,好文章!
jetspeed门户项目组介绍 -
bobo:
需要考虑不同浏览器的兼容性
通过网页访问本地资源程序 -
tag13346:
说得这么玄,看下
时空趋势理论 --- 超越时空的均线技术(转载 )
提供 一种方法 顺序访问 一个聚和 对象中的各个元素,而又不暴露其内部的表示或实现。
迭代器模式让我们能游走于聚合内的每一个元素,而又不暴露其内部的表示。把游走的任务放在迭代器上,而不是聚合上。这样简化了聚合的接口和实现,也让责任各得其所。
1.迭代器允许访问聚合的元素,而不需要暴露它的内部结构。
2.迭代器将遍历聚合的工作封装进一个对象中。
3.当使用迭代器的时候,我们依赖聚合提供遍历。
4.迭代器提供了一个通用的接口,让我们遍历聚合项,当我们编码使用聚合的项时,就可以使用多太机制。
迭代器模式让我们能游走于聚合内的每一个元素,而又不暴露其内部的表示。把游走的任务放在迭代器上,而不是聚合上。这样简化了聚合的接口和实现,也让责任各得其所。
1.迭代器允许访问聚合的元素,而不需要暴露它的内部结构。
2.迭代器将遍历聚合的工作封装进一个对象中。
3.当使用迭代器的时候,我们依赖聚合提供遍历。
4.迭代器提供了一个通用的接口,让我们遍历聚合项,当我们编码使用聚合的项时,就可以使用多太机制。
package pattern; import java.util.ArrayList; import java.util.Calendar; import com.sun.org.apache.xalan.internal.xsltc.runtime.Hashtable; public class MenuTestDrive { public static void main(String[] args) { PancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu(); DinerMenu dinerMenu = new DinerMenu(); CafeMenu cafeMenu = new CafeMenu(); Waitress waitress = new Waitress(pancakeHouseMenu, dinerMenu,cafeMenu); waitress.printMenu(); } } class MenuItem { String name; String description; boolean vegetarian; double price; public MenuItem(String name, String description, boolean vegetarian, double price) { this.name = name; this.description = description; this.vegetarian = vegetarian; this.price = price; } public String getName() { return name; } public String getDescription() { return description; } public boolean isVegetarian() { return vegetarian; } public double getPrice() { return price; } } interface Menu{ public Iterator creatIterator(); } class PancakeHouseMenu implements Menu { ArrayList<MenuItem> menuItems=new ArrayList<MenuItem>(); public PancakeHouseMenu() { menuItems = new ArrayList<MenuItem>(); addItem("K&B'S Pancake Breakfast", "Pancakes with scrambled eggs,and toast", true, 2.99); addItem("Regular Pancake Breakfast", "Pancakes with fried eggs,and sausage", true, 2.99); addItem("BlueBerry Pancakes ", "Pancakes made with fresh blueberries", true, 3.49); addItem("Waffles", "Waffles with your choice of blueberries or strawberries", true, 3.59); } public void addItem(String name, String description, boolean vegetarian, double price) { MenuItem menuItem = new MenuItem(name, description, vegetarian, price); menuItems.add(menuItem); } public Iterator creatIterator() { return new PancakeHouseMenuIterator(menuItems); } } class DinerMenu implements Menu{ static final int MAX_ITEMS = 6; int numberOfItems = 0; MenuItem[] menuItems= new MenuItem[MAX_ITEMS]; public DinerMenu() { addItem("Vegetarian BLT", "(Fakin') Bacon with lettuce & tomato on whole wheat", true, 2.99); addItem("BLT", " Bacon with lettuce & tomato on whole wheat", true, 2.99); addItem("Soup of the day", "Soup of the day,with a side of potato salad", true, 2.99); addItem("Hotdog", "A hot dog, with saurkraut,relish,onions,topped with cheese", true, 2.99); } public void addItem(String name, String description, boolean vegetarian, double price) { MenuItem menuItem = new MenuItem(name, description, vegetarian, price); if (numberOfItems >= MAX_ITEMS) { System.err.println("Sorry menu is full ,can not add item to menu!"); } else { menuItems[numberOfItems] = menuItem; numberOfItems = numberOfItems + 1; } } public Iterator creatIterator() { return new DinerMenuIterator(menuItems); } } class CafeMenu implements Menu{ Hashtable menuItems=new Hashtable(); int position=0; public CafeMenu(){ addItem("Vegegie 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", true, 2.99); addItem("Burrito", "A large burrito , with whole pinto beans,salsa,guacamole", true, 2.99); } public void addItem(String name, String description, boolean vegetarian, double price) { MenuItem menuItem = new MenuItem(name, description, vegetarian, price); menuItems.put(position, menuItem); position++; } public Iterator creatIterator() { return new CafeMenuIterator(menuItems); } } interface Iterator { boolean hasNext(); Object next(); void remove(int i); } class DinerMenuIterator implements Iterator { MenuItem[] items; int position = 0; public DinerMenuIterator(MenuItem[] items) { this.items = items; } public boolean hasNext() { if (position >= items.length || items[position] == null) { return false; } else return true; } public Object next() { MenuItem menuItem = items[position]; position = position + 1; return menuItem; } public void remove(int i){ if(i>=items.length || items[i] == null){ System.err.println("err"); }else{ for(int n=i;n<items.length-1;n++){ items[n]=items[n+1]; } } } } class PancakeHouseMenuIterator implements Iterator { ArrayList<MenuItem> items; int position = 0; public PancakeHouseMenuIterator(ArrayList<MenuItem> items) { this.items = items; } public boolean hasNext() { if (position >= items.size()) { return false; } else return true; } public Object next() { MenuItem menuItem = (MenuItem) items.get(position); position = position + 1; return menuItem; } @Override public void remove(int i) { items.remove(i); } } class CafeMenuIterator implements Iterator { Hashtable items; int position = 0; public CafeMenuIterator(Hashtable items) { this.items = items; } public boolean hasNext() { if (position >= items.size()) { return false; } else return true; } public Object next() { MenuItem menuItem = (MenuItem) items.get(position); position++; return menuItem; } @Override public void remove(int i) { items.remove(i); } } class AlternatingDinerMenuIterator implements Iterator{ MenuItem[] items; int position; public AlternatingDinerMenuIterator(MenuItem[] items){ this.items=items; Calendar rightNow=Calendar.getInstance(); position =rightNow.get(Calendar.DAY_OF_WEEK)%2; } public boolean hasNext(){ if(position>=items.length||items[position]==null){ return false; }else{ return true; } } public Object next(){ MenuItem menuItem=items[position]; position=position+2; return menuItem; } public void remove(int i){ throw new UnsupportedOperationException("Alternating Diner Menu Iterator does not support remove()"); } } class Waitress { Menu pancakeHouseMenu; Menu dinerMenu; CafeMenu cafeMenu; public Waitress(Menu pancakeHouseMenu, Menu dinerMenu,CafeMenu cafeMenu) { this.pancakeHouseMenu = pancakeHouseMenu; this.dinerMenu = dinerMenu; this.cafeMenu= cafeMenu; } public void printMenu() { Iterator PancakeHouseMenuIterator = pancakeHouseMenu .creatIterator(); Iterator dinerMenuIterator = dinerMenu.creatIterator(); Iterator cafeMenuIterator=cafeMenu.creatIterator(); System.out.println("MENU\n------\nBREAKFAST"); printMenu(PancakeHouseMenuIterator); System.out.println("\nLUNCH"); printMenu(dinerMenuIterator); System.out.println("\nDINNER"); printMenu(cafeMenuIterator); } private void printMenu(Iterator iterator) { while (iterator.hasNext()) { MenuItem menuItem = (MenuItem) iterator.next(); System.out.print(menuItem.getName() + ","); System.out.print(menuItem.getPrice() + "--"); System.out.println(menuItem.getDescription()); } } }
发表评论
-
模版模式 读书笔记
2008-04-10 18:04 1764在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模版 ... -
Facade patten 读书笔记
2008-04-10 18:03 981提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一 ... -
Adapter patten 读书笔记
2008-04-10 18:01 967将一个类的接口,转换成客户期待的另一个接口。适配器让原本接口不 ... -
command patten 读书笔记
2008-04-10 17:56 9101 。命令模式将发出请求的对象和执行请求的对象解耦。 2。在被 ... -
单例模式 读书笔记
2008-04-07 18:44 911确保一个类只有一个实 ... -
抽象工厂模式读书笔记
2008-04-07 18:39 989提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具 ... -
工厂方法 读书笔记
2008-04-03 14:27 1138工厂发法定义了一个创建对象的接口或者抽象类,但是有子类来决定要 ... -
装饰者模式 读书笔记
2008-04-03 14:25 2141package pattern; public clas ... -
观察者模式(读书笔记)
2008-04-01 18:33 1132观察者模式定义了对象之间的一对多依赖,这样一来当一个对象改变状 ... -
Head First Design Patterns 读后感3-策略模式
2008-04-01 18:32 1335策略模式-定义了算法族,分别封装起来,让他们之间可以相互替换, ... -
Head First Design Patterns 读后感2 设计原则
2008-03-31 13:47 11611。软件开发中唯一一个不变的是 变化。大千世界,千奇百怪,行行 ... -
Head First Design Patterns 读后感1
2008-03-31 13:46 1421如何让大脑把记得更深刻 1。慢点,你理解的越多,记得月少 2。 ... -
proxy state 读书笔记
2008-03-28 18:35 1702定义:为另一个对象提供一个替身或者战位符以范围这个对象。 要点 ... -
阅读不懂,图书之过——《大话设计模式》创作历程 (转载)
2008-03-28 11:41 1133写这本书的确是个意外,因为在之前,我和所有的做技术的朋友一样, ... -
state patten 读书笔记
2008-03-25 14:53 1217允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的 ... -
组合模式 读书笔记
2008-03-24 15:12 1320允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能 ...
相关推荐
良葛格的《Design Pattern学习笔记》不仅涵盖了经典的GOF设计模式,还额外介绍了几种多线程模式,这使得这份学习笔记成为了一个宝贵的学习资源。下面将对其中的部分设计模式进行详细介绍。 #### 二、GOF设计模式 ...
2. 迭代器模式(Iterator Pattern):提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。 3. 中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互。 4. 命令模式...
15. **迭代器模式(Iterator)**:提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。 16. **访问者模式(Visitor)**:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提...
- 迭代器模式(Iterator):提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。 - 中介者模式(Mediator):定义一个中介对象来简化原本复杂的对象交互。 - 观察者模式(Observer):定义对象之间的一...
- **迭代器**:使用`Iterator`或增强型for循环遍历集合。 ### 第八章:IO流 - **输入输出流**:`InputStream`、`OutputStream`。 - **文件操作**:读写文件、文件复制等。 - **缓冲区流**:使用`BufferedReader`、`...
备忘录模式通常与其他设计模式结合使用,如命令模式(Command Pattern)和迭代器模式(Iterator Pattern)。在命令模式中,备忘录可以用来存储命令执行前的状态,以便在需要时撤销操作。在迭代器模式中,备忘录可以...
9.1.5 访问对象的iterator 273 9.1.6 排序收集的对象 276 9.1.7 使用泛型 280 9.2 键值对应的map 284 9.2.1 常用map操作类 284 9.2.2 访问map键值 288 9.3 重点复习 291 9.4 课后练习 292 chapter10...
设计模式是软件工程中的一种最佳实践,它是在特定情境下解决常见问题的经验总结。...在DesignPattern-master这个压缩包中,你可以找到关于这些模式的详细讲解和实例代码,为你的Java开发之旅提供宝贵的参考资料。
### Struts2.1学习笔记 #### Struts2的来源与优点 - **来源**:Struts2是在WebWork2的基础上发展起来的,它继承了WebWork2的优点,并且进行了改进,使其更适合现代Web应用程序的需求。与Struts1相比,Struts2的...
在具体使用Collection接口时,我们还可以使用`iterator()`获取迭代器,通过迭代器遍历集合。另外,`clear()`方法可以清空集合,`isEmpty()`检查集合是否为空,`toArray()`则可以将集合转换为数组。对于多线程环境,...
### 23种设计模式学习笔记 #### 一、软件设计模式的概念与意义 **概念:** 软件设计模式(Software Design Pattern),又称设计模式,是一套被广泛采用、经过整理和分类的代码设计经验总结。它针对软件设计过程中...