观察者模式
文章目录
- UML类图
- 位置
- Reader接口
- RSS接口
- ReaderOne.java
- ReaderTwo.java
- RssData.java
- Test.java
- 运行结果
UML类图
位置
Reader接口
你会
package guanchazhe; /* * 这个你会,抽象方法 */ public interface Reader { public void update(String news); }RSS接口
接口的话你都会
package guanchazhe; /* * 接口你都会 */ public interface RSS { public void subscribeRSS(Reader readers); public void cancleRSS(Reader readesr); }ReaderOne.java
- 会写One就会写Two
- 只是个update更新方法,就把接收到的参数 新信息 赋值给news
package guanchazhe; /* * 会写one就复制出Two * 是的!!这个方法你写对了 */ public class ReaderOne implements Reader{ @Override public void update(String news) { //那你就输出 更新加news System.out.println("读者1更新:"+news); } }ReaderTwo.java
同理
package guanchazhe; /* * 是的!!这个方法你写对了 */ public class ReaderTwo implements Reader{ @Override public void update(String news) { System.out.println("读者2更新:"+news); } }RssData.java
这个是方法最多最复杂的,但是认真读注释,理解逻辑,我相信你能写出来的。
package guanchazhe; /* * 工具包!!!util 不要导错包 * 期末考试只写关键代码 */ import java.util.ArrayList; import java.util.List; public class RssData implements RSS{ //尖括号表示泛型 //这两个你会 private List readers; private String news; @Override //这个是实现接口重写的方法,一共两个 public void subscribeRSS(Reader reader){ /* * 本质还是输出, * 读题,是订阅RRS,并且参数是一个读者 * 就是读者订阅RRS * * 首先判断读者在不在readers这个list中 * contains()方法,add()方法是list自带的 * 如果不包含,就先添加,然后输出订阅信息;不然的话,就输出 已经是会员不能再 订阅 * 方法完成 */ //订阅期刊 //当用户不在里面 if(!readers.contains(reader)){ readers.add(reader); System.out.println("该用户订阅成功"); }else{ System.out.println("该用户已是会员,不能再次订阅"); } } //这个也是实现接口重写的方法 public void cancleRSS(Reader reader){ /* * 这个是取消订阅的方法,并且传入 一个读者的参数,就说明这个方法是 一个读者取消订阅 * remove()方法也是list自带的方法 * * 判断,如果这个读者包含在readers这个list里面,那就先将这个读者从list移除,再输出 该读者已取消订阅; * 不然的话,就说明读者不在list里里面,那自然不能取消订阅,所以就输出 用户不是会员,不能取消订阅 */ if(readers.contains(reader)){ readers.remove(reader); System.out.println("该用户取消订阅成功"); }else{ System.out.println("该用户不是会员,不能取消订阅"); } } //构造!!!! public RssData(){ /* * 你看 rssdata Rss的数据,要包括什么呢?读者列表和信息 * readers这个list 和 news在最上面定义过了 * readers要创建对象,news赋值 */ readers = new ArrayList(); news = ""; } /* * setnews 就是把新信息赋给 news */ public void setNews(String updateNews){ news = updateNews; } /* * 通知reader的方法 * 是不是要通知每一个读者,怎么通知 每一个?遍历 * 遍历readers这个list 的所有元素 * * * 建议:增强for循环:r.update();直接调用 * 普通for循环:readers.get(i) 得到元素再打点调用update() * get()方法也是list自带的 */ public void notifyReaders(){ //遍历 for(int i = 0;iTest.java
这里使用的是单元测试的方法,要注意:
- class类名不能是Test
- 不是main方法
- 写的单元测试方法之前要写@Test,并且导入 util包,工具包
package guanchazhe; import org.junit.Test; /* * RSS 订阅中心 * subScribe 订阅 * cancel 取消 * reader 读者 注意导自己写的包 */ public class TestRSS { //使用单元测试时,class 不能写Test @Test public void testRSS(){ /* * 首先,得有读者吧,所以要创建两个读者对象 * 还得有信息和readers list吧,这个都在RssData里面,所以新建RssData 对象 * * 只有订阅中心RSS才能 * 加 读者 进readers list , subscribe * 取消读者, cancle * 设置新消息 setNews * 最后再通知所有读者 notifyReaders */ RssData rss = new RssData(); Reader one = new ReaderOne(); Reader two = new ReaderTwo(); rss.subscribeRSS(one); rss.subscribeRSS(two); rss.cancleRSS(one); rss.setNews("快期末了,抓紧复习"); rss.notifyReaders(); } }运行结果
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!



