IteratorPattern(迭代子模式)

时间:2023-01-17 22:33:32
/**
* 迭代子模式
* @author TMAC-J
* 聚合:某一类对象的集合
* 迭代:行为方式,用来处理聚合
* 是一种行为模式,用于将聚合本身和操作聚合的行为分离
* Java中的COLLECT就是一种聚合,Iterator类是一种迭代
* 好处:分开了行为和本身,便于行为的扩展和本身的维护,符合开闭原则
* 分为白盒(宽接口)和黑盒(窄接口)
* 白盒:白盒提供了一些可以访问聚合内部的方法,如getSize,add,remove等等
* 黑盒:不提供或者提供很少外部访问的方法,对外部透明,就像一个黑盒,从外面看不到里面
* 一般而言聚合可以提供一些工厂方法或者抽象工厂来创建不同的迭代
* 下面的例子用黑盒来说明,因为我觉得黑盒相比于白盒来说分离的更开,耦合降为最低
*/
public class IteratorPattern { abstract class Aggregate { private Object[] objs; public Aggregate(Object[] objs ) {
this.objs = objs;
} /**
* 只提供Iterator的工厂方法,没有暴露其他方法给外部
*/
abstract Iterator createIterator(); } interface Iterator{ void add(Object obj); void remove(); int getSize(); } public class ConcreteAggregate extends Aggregate{ public ConcreteAggregate(Object[] objs) {
super(objs); } @Override
Iterator createIterator() {
return new ConcreteIterator(this);
} } public class ConcreteIterator implements Iterator{ private int size;//aggregate的大小 private int position;//指针(当时学的数据结构终于有用了.....) private Aggregate aggregate; public ConcreteIterator(Aggregate aggregate) {
this.aggregate = aggregate;
} @Override
public synchronized void add(Object obj) {
if(position<size){
aggregate.objs[position] = obj;
position++;
size++;
}
else{
System.out.println("当前聚合已满!");//正常情况下这里要写一个日志类...但太麻烦了,就不写了
}
} @Override
public synchronized void remove() {
if(position>0){
aggregate.objs[position-1] = null;
position--;
size--;
}
else{
System.out.println("当前聚合为空!");
}
} @Override
public int getSize() {
if(aggregate!=null)return aggregate.objs.length;
return 0;
} } public void test(){
Object[] numbers = {1,2,3,4,5};
Aggregate aggregate = new ConcreteAggregate(numbers);
Iterator iterator = aggregate.createIterator();
iterator.add(1);
iterator.remove();
iterator.getSize();
} }

IteratorPattern(迭代子模式)的更多相关文章

  1. &lbrack;工作中的设计模式&rsqb;迭代子模式Iterator

    一.模式解析 迭代子模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象 1.迭代子模式一般用于对集合框架的访问,常用的集合框架为lis ...

  2. &lbrack;设计模式&rsqb; javascript 之 迭代子模式

    迭代子模式:定义 迭代子模式,又称游标模式,是一种用于对聚集进行顺序访问规则的模式,是一种行为模式:它用于提供对聚集对象的一种统一的访问接口,使客户能够在不了解聚集对象内部结构的情况对聚集对象进行访问 ...

  3. JAVA设计模式之迭代子模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述迭代子(Iterator)模式的: 迭代子模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不 ...

  4. 迭代子模式(Iterator)

    迭代子模式(Iterator) 顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松.这句话包含两层意思:一是需要遍历的对象,即聚集对 ...

  5. 设计模式《JAVA与模式》之迭代子模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述迭代子(Iterator)模式的: 迭代子模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不 ...

  6. java设计模式----迭代子模式

    顺序访问聚集中的对象,主要用于集合中.一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问. 迭代子模式为遍历集合提供了统一的接口方法.从而使得客户端不需要知道聚集的内部结构就能 ...

  7. Java设计模式(18)——行为模式之迭代子模式(Iterator)

    一.概述 概念 UML简图 // Aggregate:聚集(集合) 角色 抽象迭代子:定义遍历元素所需要的接口 具体迭代子:实现抽象迭代子接口,保持游标 聚集/具体聚集:定义/实现创建迭代子对象的接口 ...

  8. [设计模式]迭代子模式 Iterator

    迭代子模式又叫做游标cursor模式,是对象的行为模式.迭代子模式可以顺序的访问一个聚集中的元素而不必暴露聚集的内部表象. 迭代子模式被广泛的应用在Java语言的API中的几个设计模式之一.在Java ...

  9. 《JAVA与模式》之迭代子模式

    迭代子模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(internal representation). 聚集和JAVA聚集 多个 ...

随机推荐

  1. jQuery:年月日三级联动

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs ...

  2. JavaScript中的this关键字

    在JavaScript中,函数的this关键字的行为与其他语言相比有很多不同.在JavaScript的严格模式和非严格模式下也略有区别. 在绝大多数情况下,函数的调用方式决定了this的值.this不 ...

  3. 【GoLang】golang 微服务框架 介绍

    原文如下: rpcx是一个类似阿里巴巴 Dubbo 和微博 Motan 的分布式的RPC服务框架,基于Golang net/rpc实现. 谈起分布式的RPC框架,比较出名的是阿里巴巴的dubbo,包括 ...

  4. respond&period;js

    Respond.js,低版本浏览器也能够支持媒体查询 在之前有篇文章也是介绍IE6,7,8支持媒体查询的(查看),Respond.js这个比css3-mediaqueries更为强大一些,它可以支持l ...

  5. &lbrack;Weblogic&rsqb;startWebLogic&period;cmd配置JAVA&lowbar;OPTIONS无效的解决思路与方案

    事情背景: 由于某个项目原因,需要在2个域的startWebLogic.cmd文件加入如下设置 set JAVA_OPTIONS=%JAVA_OPTIONS% -javaagent:"pat ...

  6. ueditor使用总结——前端篇&period;md

    首先吐槽下,百度的API太坑,谁让人家都是大牛呢. 说明:本文所涉猎代码均依托于seajs,本文所用ueditor版本为1.4.3.3 JSP UTF-8版 编辑器前端部署: 1.把ueditor引入 ...

  7. Python常用内建模块

    Python常用内建模块 datetime 处理日期和时间的标准库. 注意到datetime是模块,datetime模块还包含一个datetime类,通过from datetime import da ...

  8. jQuery选择

    1.基本的选择 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY29tZW9uc3RvbmU=/font/5a6L5L2T/fontsize/400/fil ...

  9. Three&period;js 学习笔记&lpar;1&rpar;--坐标体系和旋转

    前言 JavaScript 3D library The aim of the project is to create an easy to use, lightweight, 3D library ...

  10. Nginx反向代理部署NodeJS项目

    在nginx配置文件种的http节点下: server { listen 8005; server_name localhost; location /{ proxy_set_header X_Rea ...