中介者:
//具体中介者public class Midiator { PersistentDB persistentDB;//此处可以使用List来存放所有的同事 PersistentFile persistentFile; public Midiator setPersistentDB(PersistentDB persistentDB) { this.persistentDB = persistentDB; return this; } public Midiator setPersistentFile(PersistentFile persistentFile) { this.persistentFile = persistentFile; return this; } public void notifyOther(IPersistent persistent,Object data){ if(persistent instanceof PersistentDB)//如果同事都放在List中,此处遍历即可 persistentFile.getData(data); if(persistent instanceof PersistentFile) persistentDB.getData(data); }}
使用:
public class TestUse { public static void main(String args[]){ Object data = "数据"; PersistentDB persistentDB = new PersistentDB(); PersistentFile persistentFile = new PersistentFile(); Midiator midiator = new Midiator(); midiator.setPersistentDB(persistentDB).setPersistentFile(persistentFile); persistentDB.getData(data, midiator); persistentFile.getData(data, midiator); }}//输出(省略了换行符):数据 已保存到数据 已保存到文件数据 已保存到文件数据 已保存到
就上例,如果还有许多的持久化组件(具体同事),可以在中介者中使用一个List来存放他们的引用,set的时候就添加。在通知其他同事时,遍历这个List,除了参数本身这个同事,其他的依次通知,即可实现。
中介者消除了同事与同事间直接的关联。
11、备忘录模式(Memento Pattern)
别名:标记(Another Name:Token)
Without violating encapsulation,captrue and externalize an object' orifianl state so that the object can be restored to this state later.
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存该状态,这样就可以将该对象恢复到之前保存的状态。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33893-20.html