控制台输出:
当前文本:这里是初始文本,可能为文件中读取的。开始修改文本:当前文本:这里是初始文本,可能为文件中读取的。添加文字1当前文本:这里是初始文本,可能为文件中读取的。添加文字开始恢复:当前文本:这里是初始文本,可能为文件中读取的。添加文字1当前文本:这里是初始文本,可能为文件中读取的。开始重做:当前文本:这里是初始文本,可能为文件中读取的。添加文字1当前文本:这里是初始文本,可能为文件中读取的。添加文字再次恢复:当前文本:这里是初始文本,可能为文件中读取的。添加文字1当前文本:这里是初始文本,可能为文件中读取的。再次重做:当前文本:这里是初始文本,可能为文件中读取的。添加文字1当前文本:这里是初始文本,可能为文件中读取的。添加文字再次恢复:当前文本:这里是初始文本,可能为文件中读取的。添加文字1当前文本:这里是初始文本,可能为文件中读取的。当前文本:这里是初始文本,可能为文件中读取的。添加文字2再次重做:
该例子就是备忘录模式典型的例子。
12、观察者模式(Observer Pattern)
别名: 依赖,发布/订阅(Another Name: Dependents, Publish/Subscribe)
定义对象间的一种一对多的依赖关系,当一个对象状态发生改变时,所有依赖它的对象都得到通知并被自动更新。
何时使用
当一个对象的数据更新时,需要通知其他对象,而又不希望和被通知的对象形成紧耦合时
优点
...
比如我们有个天气服务(主题),然后有多个使用它的客户端(观察者),包括android和iphone端app的服务(观察者),那么就可以使用这么模式。
我们需要一种结构存放天气信息(注意,省略了get、set方法!):
//天气的消息实体public class WeatherInfo { private long time; private String weather; public WeatherInfo(long time,String weather){ this.time = time; this.weather = weather; } @Override public boolean equals(Object obj) { WeatherInfo info = (WeatherInfo) obj; return info.time==this.time&&info.weather.equals(this.weather); }}
然后我们定义天气服务的接口(主题),以表示它应实现哪些功能:
//主题public intece IWeatherService { void addClient(Client client); //添加观察者 boolean deleteClient(Client client);//删除观察者 void notifyClients(); //通知 void updateWeather(WeatherInfo info);//主题内容更新}
接着就是客户端的接口描述:
//观察者public intece Client { void getWeather(WeatherInfo info);}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33893-24.html
不配做人
有些人不打他是认为你好欺负的