Diseño gráfico de Java iterador
- Mira una demanda concreta
- La forma tradicional de analizar el problema
- Iterador patrón de introducción básica
- Iterator modo de principio clase de la figura.
- Iterativos Ejemplos modo de aplicación
- El código fuente de análisis conjunto ArrayList de aplicaciones - iterador en el JDK
- Notas y detalles del iterador
Escribir un programa para mostrar la estructura de una escuela facultades: la demanda es demostrar la facultad de la escuela en una composición de página, una escuela tiene más universidades, más de un departamento de la universidad. Figura:
1) La universidad visto como una subclase de la escuela, el Departamento es una subclase de la universidad, esto es en realidad algo a destacar el tamaño de la organización para llevar a cabo jerárquica.
2) De hecho, solicitamos es: en una página para mostrar la composición del cuerpo docente de la escuela, una escuela tiene más universidades, más de un departamento de la universidad, por lo que este programa no se puede lograr adecuadamente la operación de recorrido.
1) Iterador (iterador) es un patrón de diseño común, que pertenece a tipo de modelo
2) Si conjunto de elementos son implementados de una manera diferente, no es una matriz, así como un conjunto de clases Java, o hay otras maneras, cuando un cliente para recorrer la colección de estos elementos es necesario el uso de una variedad de maneras de travesía, sino que también expone los elementos estructurales internos, considere el uso de un iterador resuelto.
3) Modo iterativo, un tipo de interfaz para proporcionar un conjunto unificado de elementos atravesados, de manera consistente a través del elemento de la colección, la necesidad colección no conoce los objetos representación subyacente, a saber: su estructura interna no está expuesto.
Descripción:
. 1) el iterador: iterador de la interfaz, se proporciona el sistema, lo que significa la hasNext, A continuación, quitar
2) ConcreteIterator: clase de iterador específica, la iteración de gestión.
3) agregada: una interfaz unificada para la polimerización, el cliente en particular de polimerización y de desacoplamiento.
4) ConcreteAggreage: conjunto específico de polimerización de la realización del objeto, y para proporcionar un método que devuelve un iterador, que iterador puede iterar a través de la serie de
5) Cliente: El cliente, a través de la Iterator y subclases dependientes agregado.
- Ejemplos de aplicación de programación necesarios para mostrar una estructura facultad de la escuela: la demanda es demostrar la escuela en una página compuesta de profesores, una escuela tiene más universidades, más de un departamento de la universidad.
package com.example.demo.iterator;
import java.util.Iterator;
import javax.swing.text.Position;
public class ComputerCollegeIterator implements Iterator{
// 这里我们需要Department 是以怎样的方式存放
private Department[] departments;
// 遍历的位置
private int position = 0;
public ComputerCollegeIterator(Department[] departments) {
super();
this.departments = departments;
}
/**
* 判断是否还有下一个元素
*/
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
if (departments.length <= position || departments[position] == null) {
return false;
}
return true;
}
@Override
public Object next() {
// TODO Auto-generated method stub
Department department = departments[position];
position += 1;
return department;
}
}
package com.example.demo.iterator;
import java.util.Iterator;
import java.util.List;
public class InfoColleageIterator implements Iterator{
/**
* 信息工程学院是以list方式存放系
*/
private List<Department> departmentList;
/**
* 索引
*/
private int index = -1;
public InfoColleageIterator(List<Department> departmentList) {
super();
this.departmentList = departmentList;
}
/**
* 判断list中还有没有下一个元素
*/
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
if (index >= departmentList.size() - 1) {
return false;
}
index += 1;
return true;
}
@Override
public Object next() {
// TODO Auto-generated method stub
return departmentList.get(index);
}
/**
* remove空实现
*/
public void remove() {
}
}
package com.example.demo.iterator;
/**
* 系
* @author zhaozhaohai
*
*/
public class Department {
private String name;
private String desc;
public Department(String name, String desc) {
super();
this.name = name;
this.desc = desc;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
package com.example.demo.iterator;
import java.util.Iterator;
public interface College {
public String getName();
/**
* 增加系的方法
* @param name
* @param desc
*/
public void addDepartment(String name, String desc);
/**
* 返回一个迭代器,遍历
* @return
*/
public Iterator createIterator();
}
package com.example.demo.iterator;
import java.util.Iterator;
public class ComputerCollege implements College{
private Department[] departments;
// 保持当前数组的对象个数
private int numOfDepartment = 0;
public ComputerCollege() {
departments = new Department[5];
addDepartment("java", "java");
addDepartment("前端", "前端");
addDepartment("大数据", "大数据");
}
@Override
public String getName() {
// TODO Auto-generated method stub
return "计算机学院";
}
@Override
public void addDepartment(String name, String desc) {
// TODO Auto-generated method stub
Department department = new Department(name, desc);
departments[numOfDepartment] = department;
numOfDepartment += 1;
}
@Override
public Iterator createIterator() {
// TODO Auto-generated method stub
return new ComputerCollegeIterator(departments);
}
}
package com.example.demo.iterator;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class InfoCollege implements College{
private List<Department> departmentList;
public InfoCollege() {
departmentList = new ArrayList<Department>();
addDepartment(" 信息安全专业 ", "信息安全专业");
addDepartment("网络安全专业", "网络安全专业");
addDepartment("工程安全专业", "工程安全专业");
}
@Override
public String getName() {
// TODO Auto-generated method stub
return "信息工程学院";
}
@Override
public void addDepartment(String name, String desc) {
// TODO Auto-generated method stub
Department department = new Department(name, desc);
departmentList.add(department);
}
@Override
public Iterator createIterator() {
// TODO Auto-generated method stub
return new InfoColleageIterator(departmentList);
}
}
package com.example.demo.iterator;
import java.util.Iterator;
import java.util.List;
public class OutPutImpl {
// 学院集合
private List<College> colleges;
public OutPutImpl(List<College> colleges) {
super();
this.colleges = colleges;
}
/**
* 遍历所有学院,然后调用printDepartment 输出各个学院的系
*/
public void printCollege() {
// 从collegeList 取出所有学院,Java中的list 已经实现Iterator
Iterator iterator = colleges.iterator();
while (iterator.hasNext()) {
// 取出一个学院
College college = (College) iterator.next();
System.out.println("====" + college.getName() + "====");
printDepartment(college.createIterator());
}
}
/**
* 输出学院里的系
* @param iterator
*/
public void printDepartment(Iterator iterator) {
while (iterator.hasNext()) {
Department department = (Department)iterator.next();
System.out.println(department.getName());
}
}
}
package com.example.demo.iterator;
import java.util.ArrayList;
import java.util.List;
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 创建学院
List<College> colleges = new ArrayList<College>();
ComputerCollege college = new ComputerCollege();
InfoCollege infoCollege = new InfoCollege();
colleges.add(college);
//colleges.add(infoCollege);
OutPutImpl outPutImpl = new OutPutImpl(colleges);
outPutImpl.printCollege();
}
}
Sobre el papel de análisis diagrama de clases y descripción:
1) la clase interna Itr que sirve como implementa la clase específica del iterador Iterator como ArrayList clase interna
2) Lits es para el interfaz agregada clase que comprende un iterador de () devuelve el método un objeto iterador
3) interfaz agregada lista ArrayList se implementa subclase iterador clase de implementación ()
. 4) proporciona el sistema de interfaz iterador
5) para resolver el modo iterativo, conjunto diferente (ArrayList, LinkedList) problema recorrido unificó
Ventajas:
1) para proporcionar un enfoque unificado transversal del objeto, la necesidad de cliente para considerar el tipo de polimerización, un método que utiliza una puede atravesar el objeto.
2) oculta la estructura interna de la polimerización, el cliente de polimerización para atravesar solamente toma el tiempo para iterador, pero no sabrá la composición específica de la polimerización.
3) para proporcionar una idea de diseño es que una clase debe ser sólo una de las razones para el cambio causado (llamado el Principio de Responsabilidad Individual). En la clase de agregado, tenemos que separar el repetidor, que es la gestión de una colección de objetos separados y responsabilidades a través de la colección de objetos, por lo que el cambio conjunto, afectan sólo el objeto agregado. Y si el cambio de recorrido, que afecta sólo el iterador.
4) Cuando una pantalla para un conjunto de objetos similares, o para atravesar el mismo conjunto de objetos usando un modo iterativo adecuado.
Desventajas:
1) tienen cada uno un iterador objeto agregado, el iterador no generará una pluralidad de clase de gestión.