设计模式之迭代模式
来源:互联网 发布:无线高清网络摄像机 编辑:程序博客网 时间:2024/06/05 07:22
定义
提供一种方法顺序访问一个聚合对象的各个元素而有不暴露该该对象的内部表示。
使用场景
客户收购了另一家公司,客户方的老板像查看全部工资情况,但是双方存储工资使用了不同的数据结构。
代码
定义工资对象,这里仅提供名字和薪资两个属性,为了测试重写toString方法。
package iterator;public class PayModel { private String name; private int salary; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getSalary() { return salary; } public void setSalary(int salary) { this.salary = salary; } @Override public String toString() { return "name="+name+" Salary="+salary; } }
为客户端定义一个统一的接口MyIterator
package iterator;public interface MyIterator { public boolean hasNext(); public void next(); public PayModel currentItem(); public void first();}
客户公司实现这个接口
package iterator;public class IteratorCli implements MyIterator{ private ConcretAggregeteCli cli= null; private int index = -1; public IteratorCli(ConcretAggregeteCli cli) { this.cli = cli; } @Override public boolean hasNext() { // TODO 自动生成的方法存根 if (index < cli.size()) { return true; } else { return false;//这里初次写成true了,调试了一段时间 } } @Override public void next() { // TODO 自动生成的方法存根 if (index < cli.size()) { index++; } } @Override public PayModel currentItem() { // TODO 自动生成的方法存根 //System.out.println(index); return cli.get(index); } @Override public void first() { index = 0; }}
客户方收购的公司的接口实现
package iterator;public class IteratorPur implements MyIterator{ private AggregatePur aggPur= null; int index = -1; public IteratorPur(AggregatePur aggregatePur) { // TODO 自动生成的构造函数存根 this.aggPur = aggregatePur;//这个忘记写了,调试了好久 } @Override public boolean hasNext() { // TODO 自动生成的方法存根 if (index < aggPur.size()) { return true; } return false; } @Override public void next() { // TODO 自动生成的方法存根 if (index < aggPur.size()) { index++; } } @Override public PayModel currentItem() { // TODO 自动生成的方法存根 return aggPur.get(index); } @Override public void first() { // TODO 自动生成的方法存根 index = 0; }}
定义聚合接口
package iterator;public interface Aggregate { public MyIterator createIterator();}
客户公司聚合接口的实现
package iterator;import java.util.ArrayList;import java.util.List;public class ConcretAggregeteCli implements Aggregate{ private List<PayModel> list=new ArrayList<>(); public List getPayList() { return list; } public void calSalary() { PayModel pm1 = new PayModel(); pm1.setName("Burning"); pm1.setSalary(10000); PayModel pm2 = new PayModel(); pm2.setName("ZSMJ"); pm2.setSalary(1000); list.add(pm1); list.add(pm2); } @Override public MyIterator createIterator() { return new IteratorCli(this); } public int size() { return list.size(); } public PayModel get(int index) { //System.out.println(index); return list.get(index); }}
被收购公司聚合接口的实现
package iterator;public class AggregatePur implements Aggregate { private PayModel[] salaryArray; @Override public MyIterator createIterator() { // TODO 自动生成的方法存根 return new IteratorPur(this); } public PayModel[] getSalaryArray(){ //System.out.println(salaryArray[0]); return salaryArray; } public void calPay(){ PayModel pm1 = new PayModel(); pm1.setName("李四"); pm1.setSalary(12000); PayModel pm2 = new PayModel(); pm2.setName("王五"); pm2.setSalary(13000); salaryArray = new PayModel[2];//这里需要定义,否则会报空指针异常 salaryArray[0] = pm1; salaryArray[1] = pm2; } public int size() { return salaryArray.length; } public PayModel get(int index) { return salaryArray[index]; }}
客户端实现
package iterator;import java.util.List;public class Client { public static void main(String[] args) { ConcretAggregeteCli cli = new ConcretAggregeteCli(); cli.calSalary(); List list = cli.getPayList(); test(cli.createIterator()); AggregatePur pur = new AggregatePur(); pur.calPay(); PayModel[] pm = pur.getSalaryArray(); test( pur.createIterator()); } //提供一个统一的方法顺序访问聚合对象中的元素 public static void test(MyIterator mi) { mi.first(); while (mi.hasNext()) { System.out.println(mi.currentItem()); mi.next(); } }}
运行结果:
name=Burning Salary=10000
name=ZSMJ Salary=1000
name=李四 Salary=12000
name=王五 Salary=13000
阅读全文
0 0
- 设计模式之Iterator迭代模式
- 设计模式之迭代模式
- 设计模式之迭代模式
- 设计模式之Iterator - 迭代模式
- 《Java设计模式》之迭代模式
- 设计模式之迭代模式
- 设计模式之迭代模式和合成模式(4)
- 23种设计模式之迭代模式2
- Java设计模式之二十(迭代模式)
- 设计模式之迭代模式(Iterator)
- 设计模式——迭代模式
- (1) 设计模式笔记[迭代模式]
- iterator设计模式(迭代模式)
- 设计模式_迭代模式
- 设计模式_迭代模式
- 【设计模式】——迭代模式
- 设计模式-iterator迭代模式
- 设计模式——迭代模式
- 数据库连接池
- 认识mybatis归纳整理
- padans 做关联分析时常做的叠加图方法
- 14:扫雷游戏地雷数计算
- Git 命令集合
- 设计模式之迭代模式
- dede文章页图片调用
- String类
- JUnit学习笔记
- PHP字符串函数-trim()实例用法
- js-es6-函数扩展
- windows和Linux虚拟机或者云主机之间传输文件
- SVN工作文件夹左下角图标不显示解决方法
- A Simple Problem with Integers(多个数状数组)