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,迭代 ...
随机推荐
- Linux 文件操作——系统调用和标准I/O库
一.什么是文件 在讲述文件操作之前,我们首先要知道什么是文件.看到这个问题你可能会感觉到可笑,因为对于用过计算机的人来说,文件是最简单不过的概念了,例如一个文本是一个文件,一个work文档是一个文件等 ...
- mysql、sqlServer、hsql、oracle、db2各数据库支持的字段类型与最大精度
- ffmpeg常用参数一览
基本选项: -formats 输出所有可用格式 -f fmt 指定格式(音频或视频格式) -i filename 指定输入文件名,在linux下当然也能指定:0.0(屏幕录制)或摄像头 -y 覆盖已有 ...
- Javascript进阶篇——( JavaScript内置对象---上-Date,string,charAt,indexOf,split,substring,substr)笔记整理
什么是对象JavaScript 中的所有事物都是对象,如:字符串.数值.数组.函数等,每个对象带有属性和方法.对象的属性:反映该对象某些特定的性质的,如:字符串的长度.图像的长宽等:对象的方法:能够在 ...
- 笔记本开通手机WiFI热点
启用虚拟wifi: netsh wlan set hostednetwork mode=allow ssid=liuyuduen key=liuyuduen 关闭虚拟Wifi: netsh wlan ...
- JQ each
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Spring--------web应用中保存spring容器
---恢复内容开始--- 问题:在一个web应用中我使用了spring框架,但有一部分模块或组件并没有托管给Spring,比如有的可能是一个webservice服务类,如果我想在这些非托管的类里使用托 ...
- javascript 事件代理及应用
事件代理又叫事件委托在前端发开中实际是非常有用的,说事件代理之前我们先说说事件绑定 <p onclick="test()" ></p> function t ...
- linux配置加载顺序
linux加载配置项时通过下面方式 首先 加载/etc/profile配置 然后 加载/ect/profile.d/下面的所有脚本 然后 加载当前用户 .bash_profile 然后 加载.bash ...
- java的clone
做项目时有时可能会遇到需要克隆对象的时候,因为有时候对象是直接从别的类get到的,那样引用的是一个对象,修改的话会将原先的对象也修改了. java的浅克隆,十分简单.但是只会克隆基本的数据类型,当涉及 ...