Iterator(迭代器模式)--(超市管理者)
这个Iterator就是收银台干的活。
package patterns.actions.iterator;
public interface IteratorList {
boolean isEmpty();//是否还有[hasNext()]
Object nextMerchandise();//merchandise:商品
}
package patterns.actions.iterator; /**
* 收银台清点商品
* @author one
*
*/
public class IteratorCheck implements IteratorList {
private Supermarket shop; private int total=0; private int current=0; IteratorCheck(Supermarket shop){
this.shop=shop;
this.total=shop.size();
this.current=0;
} @Override
public boolean isEmpty() {
return this.current<this.total;
} @Override
public Object nextMerchandise() {
if(this.current<this.total)
return this.shop.take(this.current++);
return null;
} }
package patterns.actions.iterator; /**
* 购物的基本要素
* @author one
*
*/
public interface Shopping { public void buy(Object obj);//买新的产品[add] public IteratorList iteratorList();//结账[iterator] }
package patterns.actions.iterator; import java.util.ArrayList;
import java.util.List; /**
* 超市提供具体的购物环境
*
* @author one
*
*/
public class Supermarket implements Shopping {
private List cart = new ArrayList();// 购物车作为容器 @Override
public void buy(Object obj) {
cart.add(obj);// 将商品放到购物车 } @Override
public IteratorList iteratorList() {
return new IteratorCheck(this);
} public int size() {
return this.cart.size();
} public Object take(int current) {
if(current<this.cart.size())
return this.cart.get(current);
return null ;
}
}
package patterns.actions.iterator;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
Shopping cart = new Supermarket();
cart.buy("可乐");
cart.buy("果汁");
cart.buy("酸梅");
IteratorList check = cart.iteratorList();
while (check.isEmpty()) {
System.out.println(check.nextMerchandise());
}
}
}
输出结果:
可乐
果汁
酸梅
Iterator(迭代器模式)--(超市管理者)的更多相关文章
- [设计模式] Iterator - 迭代器模式:由一份奥利奥早餐联想到的设计模式
Iterator - 迭代器模式 目录 前言 回顾 UML 类图 代码分析 抽象的 UML 类图 思考 前言 这是一包奥利奥(数组),里面藏了很多块奥利奥饼干(数组中的元素),我将它们放在一个碟子上慢 ...
- [C# 设计模式] Iterator - 迭代器模式:我与一份奥利奥早餐的故事
Iterator - 迭代器模式 目录 前言 回顾 UML 类图 代码分析 抽象的 UML 类图 思考 前言 这是一包奥利奥(数组),里面藏了很多块奥利奥饼干(数组中的元素),我将它们放在一个碟子上慢 ...
- 设计模式17:Iterator 迭代器模式(行为型模式)
Iterator 迭代器模式(行为型模式) 动机(Motivation) 在软件构建过程中,集合对象内部结构常常变化各异.但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码可以透 ...
- 设计模式(十五):Iterator迭代器模式 -- 行为型模式
1.概述 类中的面向对象编程封装应用逻辑.类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态.单独的对象是一种组织代码的有用方法,但通常你会处理一组对象或者集合. 集合不一定是均一的.图形用 ...
- 设计模式(16)--Iterator(迭代器模式)--行为型
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.模式定义: 迭代模式又叫游标(Cursor)模式,是对象的行为模式.迭代模式可以顺序地访问一个聚集中的元素而不 ...
- Iterator 迭代器模式 MD
迭代器模式 简介 Iterator模式是行为模式之一,它把对容器中包含的内部对象的访问[委让]给外部类,使用Iterator按顺序进行遍历访问. 在程序设计中,经常有这种情况:需要从大量的数据集合中一 ...
- Iterator - 迭代器模式
定义 提供一个方法顺序訪问一个聚合对象中个各个元素,而又不须要暴露该对象的内部结构. 案例 一个聚合对象.如一个列表List.应该提供一种方法来让别人能够訪问它的元素.而又不用暴露内部结构.迭代器模式 ...
- [C++设计模式] iterator 迭代器模式
迭代器模式定义:提供一种方法顺序訪问一个聚合对象中各个元素,而又不须要暴露该对象. 迭代器分内部迭代器和外部迭代器.内部迭代器与对象耦合紧密,不推荐使用. 外部迭代器与聚合容器的内部对象松耦合,推荐使 ...
- 设计模式C++学习笔记之十四(Iterator迭代器模式)
14.1.解释 概念:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示. main(),客户 IProject,产品接口 CProject,产品类 IIterator,迭代 ...
随机推荐
- 棋盘覆盖(大数阶乘,大数相除 + java)
棋盘覆盖 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 在一个2k×2k(1<=k<=100)的棋盘中恰有一方格被覆盖,如图1(k=2时),现用一缺角的 ...
- Android Audio System 之一:AudioTrack如何与AudioFlinger
Android Framework的音频子系统中,每一个音频流对应着一个AudioTrack类的一个实例,每个AudioTrack会在创建时注册到 AudioFlinger中,由AudioFlinge ...
- WPS页面设置
以前使用WPS的时候遇到一些问题: 比如我输入一个英文的时候它总是自动的给我首字母大写,但是某些情况下我不想这样: 从VS中复制代码的时候不希望他吧那些颜色复制下来: 还有我输入1回车后它自动给我输入 ...
- HTML之学习笔记(一)简介
HTML(HyperText Markup Language超文本标记语言),'超文本'指的是页面不仅可以包含文本信息,还可以包含图片,链接等非文本元素.html与js,jq是共同用来进行网站前端开发 ...
- latex 固定图片位置
1,插入并列的子图 \usepackage{subfigure} \begin{figure}[H] \centering \subfigure[SubfigureCaption]{ \label{F ...
- appium安装 For windows
java sdk,android SDK,maven,genymotion全部已经安装完毕,只是安装appium 因为现在的appium(AppiumForWindows_1_4_13_1)需要自己重 ...
- 关于String字符串反转
这是网上看到的一篇java面试题中的问题: 问题是: 如何将一个String字符串反转. String str = "1234567"; int length = str.leng ...
- Spring-----6、Spring3.0提供的Java配置管理
转载自:http://blog.csdn.net/hekewangzi/article/details/45646279
- Ubuntu下安装arm-linux-gcc
安装步骤: 这里采用友善之臂发布的arm-linux-gcc-4.4.3.tar.gz软件包. 一.将压缩包arm-linux-gcc-4.4.3.tar.gz存放在opt目录下. 执行解压命令:su ...
- 从汇编看c++多重继承中this指针的变化
先来看一下下面的c++源码: #include <iostream> using namespace std; class X { public: virtual void print1( ...