如果对Java容器不熟悉,下面再提供一个例子(模仿Iterator,其实顺便也介绍了Iterator):
如果有多种数据结构要遍历,我们就需要一种用于遍历不同结构的工具,首先我们就需要为这个工具定义一个接口(抽象产品),用于描述如何来遍历:
//只是需要遍历一堆数据,那么只需要2个方法就可以了public intece Iterator<T> { boolean hasNext(); //是否还有下一个元素 T next(); //得到下一个元素}
然后就是我们要遍历的目标,而这些目标此处我们暂定为列表,这就是构造者:
//便于介绍,不做多的操作public intece List<T> { Iterator<T> iterator(); //返回一个遍历器 boolean add(T t); //添加元素到列表}
对于List可能有多种实现方式,比如数组和链表,此处就简陋的介绍一下,而这些就是具体构造者,而里面有遍历器的具体实现(具体产品),此处以内部类的形式放到了List的实现(具体构造者)里面,也完全可以修改代码将遍历器的实现(具体产品)独立出来:
数组的实现:
package com.anxpp.designpattern.factorymethod;//方便演示而实现的简陋的数组listpublic class ArrayList<T> implements List<T>{ private int size; //存放的元素个数,会默认初始化为0 private Object[] defaultList; //使用数组存放元素 private static final int defaultLength = 10;//默认长度 public ArrayList(){ //默认构造函数 defaultList = new Object[defaultLength]; } @Override public Iterator<T> iterator() { return new MyIterator(); } //添加元素 @Override public boolean add(T t) { if(size<=defaultLength){ defaultList[size] = t; return true; } return false; } //遍历器(具体产品) private class MyIterator implements Iterator<T>{ private int next; @Override public boolean hasNext() { return next<size; } @SuppressWarnings("unchecked") @Override public T next() { return (T) defaultList[next]; } }}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33893-4.html
谁告诉你北洋没有一发炮弹击穿击穿主装甲