博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java设计模式(八)观察者模式 迭代器模式
阅读量:6073 次
发布时间:2019-06-20

本文共 2780 字,大约阅读时间需要 9 分钟。

(十五)观察者模式

观察者模式,定义对象间一对多关系,一个对象状态发生改变,全部依赖于它的对象都收到通知而且自己主动更新,观察者与被观察者分开。比如邮件订阅、RSS订阅,假设有更新就会邮件通知你。

interface Observers{	public void update();}class Observer1 implements Observers{	public void update(){		System.out.println("observer1 has received");	}}class Observer2 implements Observers{	public void update(){		System.out.println("observer2 has received");	}}interface Subject {	public void add(Observers ob);	public void delete(Observers ob);	public void notifyObservers();	public void operation();}abstract class AbstractSubject implements Subject{	private Vector
vector = new Vector<>(); public void add(Observers ob){ vector.add(ob); } public void delete(Observers ob){ vector.remove(ob); } public void notifyObservers(){ Enumeration
enumo = vector.elements(); while(enumo.hasMoreElements()){ enumo.nextElement().update(); } }}class MySubject extends AbstractSubject{ public void operation(){ System.out.println("update self"); notifyObservers(); }}public class Observer { public static void main(String[] args){ Subject sub = new MySubject(); sub.add(new Observer1()); sub.add(new Observer2()); sub.operation(); }}
(十六)迭代器模式

说到迭代器首先想到 Iterator ,使用迭代器来为顺序訪问集合元素提供一种方式。以下是自己的一个集合,当然仅仅能放 int ,简单的实现了 迭代器的功能,当然实际的Java迭代器比这要复杂非常多。

interface Collection{	public Iterator iterator();	public Object get(int i);	public int size();	public void add(int n);}interface Iterator{	public Object previous();	public Object next();	public boolean hasNext();	public Object first();}class MyCollection implements Collection{	private int count = 10;	private int[] num = new int[count];	public void add(int n){		for(int i = 0;i < num.length;i++){			if(num[i] == 0){				num[i] = n;				return;			}		}	}	public MyCollection(int count){		this.count = count;	}	@Override	public Iterator iterator() {		return new MyIterator(this);	}	@Override	public Object get(int i) {		return num[i];	}	@Override	public int size() {		return num.length;	}}class MyIterator implements Iterator{	private Collection collection;	private int pos = -1;	public MyIterator(Collection collection){		this.collection = collection;	}	@Override	public Object previous() {		if(pos > 0){			pos--;		}		return collection.get(pos);	}	@Override	public Object next() {		if(pos < collection.size() - 1){			pos ++;		}		return collection.get(pos);	}	@Override	public boolean hasNext() {		if(pos < collection.size() - 1){			return true;		}else{			return false;		}	}	@Override	public Object first() {		pos = 0;		return collection.get(pos);	}	}public class IteratorTest {	public static void main(String[] args){		Collection col = new MyCollection(10);		for(int i = 0 ; i < 10;i++){			col.add(i * 23);		}		Iterator it = col.iterator();		while(it.hasNext()){			System.out.println(it.next());		}	}}

转载地址:http://hnngx.baihongyu.com/

你可能感兴趣的文章
kafka的分区分配策略
查看>>
react-keeper
查看>>
react 项目实战(十)引入AntDesign组件库
查看>>
flexible.js + makegrid.js 自适应布局
查看>>
js 判断对象中所有属性是否为空
查看>>
Scrapy基础(六)————Scrapy爬取伯乐在线一通过css和xpath解析文章字段
查看>>
spring MVC 运行过程
查看>>
19、其他文件编程函数(目录文件、链接文件、临时文件)
查看>>
Java LinkList遍历方式
查看>>
little w and Segment Coverage
查看>>
nginx-rtmp加入权限验证的简单方法
查看>>
《javascript高级程序设计》第一版笔记
查看>>
我的 FPGA 学习历程(09)—— 时序逻辑入门
查看>>
开发中遇到的抗
查看>>
Struts2输入校验2(框架效验)———struts2第四讲
查看>>
Eclipse安装propertie预览插件
查看>>
两个二极管反向并联一般起什么作用
查看>>
防错笔记
查看>>
Mybatis中sql语句中的in查询,一定要判断null的情况
查看>>
Ping命令简单报错介绍
查看>>