Diseño gráfico de Java iterador

Mira una demanda concreta

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:
Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción

La forma tradicional de analizar el problema

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.

Iterador patrón de introducción básica

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.

Iterator modo de principio clase de la figura.

Aquí Insertar imagen Descripción
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.

Iterativos Ejemplos modo de aplicación

  1. 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.
    Aquí Insertar imagen Descripción
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();
	}

}

El código fuente de análisis conjunto ArrayList de aplicaciones - iterador en el JDK

Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción
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ó

Notas y detalles del iterador

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.

Supongo que te gusta

Origin www.cnblogs.com/haizai/p/12593396.html
Recomendado
Clasificación