迭代器模式
提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示。
package com.ruishenh.designPatter.action.iterator;
import java.util.ArrayList;
import java.util.List;
public class IteratorClient {
public static void main(String[] args) {
ICollection
list=new Collection
(); list.add(new Module(1,"h1")); list.add(new Module(2,"h2")); list.add(new Module(3,"h3")); Iterator
moduls=list.iterator(); while(moduls.hasNext()){ Module m=moduls.next(); System.out.println(m.toString()); } } } //迭代器 interface Iterator
{ boolean hasNext(); T next(); } //组合器 interface IAssembler
{ boolean add(T t); boolean remove(T t); } //容器角色 interface ICollection
extends IAssembler
{ Iterator
iterator(); } //具体容器角色 class Collection
implements ICollection
{ private List
list; @Override public Iterator
iterator() { return new ContretelIterator
(this.list); } @Override public boolean add(T t) { if (list==null) { list=new ArrayList
(); } return list.add(t); } @Override public boolean remove(T t) { return list.remove(t); } } //具体迭代器角色 class ContretelIterator
implements Iterator
{ private transient List
list; public ContretelIterator(List
list){ this.list=list; } int cursor = 0; @Override public boolean hasNext() { return cursor!=list.size(); } @Override public T next() { return list.get(cursor++); } } class Module{ public Module(int id,String name){this.id=id;this.name=name;} int id; String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "id:"+id+",name:"+name; } }
迭代器模式核心任务把数据实体的操作和生成分离开来,容器负责产生对应的数据,迭代器负责把集合返回用户来一个个操作。
观察者模式
定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新。
package com.ruishenh.designPatter.action.observer;
import java.util.ArrayList;
import java.util.List;
public class ObserverClient {
public static void main(String[] args) {
//初始化容器,安装核心程序
Container
,ICore> container=new Container
, ICore>(new Wash()); //容器注册设备1 App1 a1=new App1(); container.add(a1); //容器注册设备1 App2 a2=new App2(); container.add(a2); //设备工作 a1.function(); a2.function(); //更新核心程序 container.upgrade(new Clear()); //设备工作 a1.function(); a2.function(); } } //约定更新接口 interface IDependent
{ void update(E e,String msg); void setCore(E e,String msg); } //核心包功能包 interface ICore{ void function(); } class Wash implements ICore{ @Override public void function() { System.out.println("洗衣服......"); } } class Clear implements ICore{ @Override public void function() { System.out.println("清除垃圾......"); } } //管理注册容器 class Container
, E>{ public Container(E e){ this.core=e; System.out.println("初始化核心程序...."); } E core; List
list; String msg="更新了最新程序,由1.0更新到1.1"; void upgrade(E core){ this.core=core; notfiy(); } void add(T t){ if(list==null)list=new ArrayList
(); list.add(t); t.setCore(core, "初始化程序,当期程序1.0版本"); } void remove(T t){ if(list==null)return; list.remove(t); } void notfiy(){ for (T t:list) { t.update(core,msg); } } } class App1 implements IDependent
{ ICore core; @Override public void setCore(ICore e, String msg) { this.core=e; System.out.print("我是App1程序:"); System.out.println(msg); } @Override public void update(ICore e,String msg) { System.out.print("我是App1程序:"); System.out.println(msg); this.core=e; } void function(){co