迭代子模式 android,IteratorPattern(迭代子模式)(示例代码)

/*** 迭代子模式

*@authorTMAC-J

* 聚合:某一类对象的集合

* 迭代:行为方式,用来处理聚合

* 是一种行为模式,用于将聚合本身和操作聚合的行为分离

* Java中的COLLECT就是一种聚合,Iterator类是一种迭代

* 好处:分开了行为和本身,便于行为的扩展和本身的维护,符合开闭原则

* 分为白盒(宽接口)和黑盒(窄接口)

* 白盒:白盒提供了一些可以访问聚合内部的方法,如getSize,add,remove等等

* 黑盒:不提供或者提供很少外部访问的方法,对外部透明,就像一个黑盒,从外面看不到里面

* 一般而言聚合可以提供一些工厂方法或者抽象工厂来创建不同的迭代

* 下面的例子用黑盒来说明,因为我觉得黑盒相比于白盒来说分离的更开,耦合降为最低*/

public classIteratorPattern {abstract classAggregate {privateObject[] objs;publicAggregate(Object[] objs ) {this.objs =objs;

}/*** 只提供Iterator的工厂方法,没有暴露其他方法给外部*/

abstractIterator createIterator();

}interfaceIterator{voidadd(Object obj);voidremove();intgetSize();

}public class ConcreteAggregate extendsAggregate{publicConcreteAggregate(Object[] objs) {super(objs);

}

@Override

Iterator createIterator() {return new ConcreteIterator(this);

}

}public class ConcreteIterator implementsIterator{private int size;//aggregate的大小

private int position;//指针(当时学的数据结构终于有用了.....)

privateAggregate aggregate;publicConcreteIterator(Aggregate aggregate) {this.aggregate =aggregate;

}

@Overridepublic synchronized voidadd(Object obj) {if(position

aggregate.objs[position]=obj;

position++;

size++;

}else{

System.out.println("当前聚合已满!");//正常情况下这里要写一个日志类...但太麻烦了,就不写了

}

}

@Overridepublic synchronized voidremove() {if(position>0){

aggregate.objs[position-1] = null;

position--;

size--;

}else{

System.out.println("当前聚合为空!");

}

}

@Overridepublic intgetSize() {if(aggregate!=null)returnaggregate.objs.length;return 0;

}

}public voidtest(){

Object[] numbers= {1,2,3,4,5};

Aggregate aggregate= newConcreteAggregate(numbers);

Iterator iterator=aggregate.createIterator();

iterator.add(1);

iterator.remove();

iterator.getSize();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值