当前位置: 首页 > wzjs >正文

鹤壁网站建设公司外贸网站营销推广

鹤壁网站建设公司,外贸网站营销推广,全国公示信息查询平台,网站建设的开票编码17.观察者模式 观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有的观察者对象,使他们能够自动更新自己。 主要解决:一个对象状态改变给其他…

17.观察者模式

观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有的观察者对象,使他们能够自动更新自己。

  • 主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。
  • 何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。
  • 如何解决:使用面向对象技术,可以将这种依赖关系弱化。
  • 关键代码:在抽象类里有一个 ArrayList 存放观察者们。

在这里插入图片描述
代码背景
一个班级,有两类学生,A类:不学习,玩,但是玩的东西不一样,有的是做游戏,有的是看电视
B类:放哨的学生,专门看老师的动向,如果老师进班了就立即通知大家。
如此就形成了一个需求,放哨的学生要通知所有玩的学生:老师来了,而不同的学生有不同的反应,有的马上把电视关闭,有的停止玩游戏。

一、抽象观察者

public abstract class Observer {public abstract void updateState();
}

二、若干具体观察者(1.玩游戏观察者)

@Data
@NoArgsConstructor
@AllArgsConstructor
public class GameObserver extends Observer {//观察者的姓名private String name;//观察者的状态private String observerState;//明确具体的通知者private ConcreteSubject subject;@Overridepublic void updateState() {observerState = subject.getSubjectState();System.out.println(String.format("%s在打游戏",name));System.out.println(String.format("观察者%s的:新状态是%s",name,observerState));}
}

(2.看电视观察者)

@Data
@AllArgsConstructor
@NoArgsConstructor
public class TVObserver extends Observer {//观察者的姓名private String name;//观察者的状态private String observerState;//明确具体的通知者private ConcreteSubject subject;@Overridepublic void updateState() {observerState = subject.getSubjectState();System.out.println(String.format("%s在看电视",name));System.out.println(String.format("观察者%s的:新状态是%s",name,observerState));}
}

3.抽象通知者

@Data
@NoArgsConstructor
@AllArgsConstructor
public abstract class Subject {private List<Observer> observerList = new ArrayList<>();/*** 通知所有观察者*/public void notifyMsg(){for (Observer observer : observerList) {observer.updateState();}}}

4.具体通知者

@Data
public class ConcreteSubject extends Subject {private String subjectState;
}

5.测试

public class ObserverTest {public static void main(String[] args) {ConcreteSubject concreteSubject = new ConcreteSubject();GameObserver gameObserver = new GameObserver("小张","",concreteSubject);TVObserver tvObserver = new TVObserver("小李", "", concreteSubject);GameObserver gameObserver1 = new GameObserver("小王", "", concreteSubject);concreteSubject.getObserverList().add(gameObserver);concreteSubject.getObserverList().add(tvObserver);concreteSubject.getObserverList().add(gameObserver1);concreteSubject.setSubjectState("老师来了,赶快学习");concreteSubject.notifyMsg();}
}
http://www.dtcms.com/wzjs/366301.html

相关文章:

  • 网站收录提交入口官网网站免费推广方式
  • 桂林卖手机网站故事式软文范例100字
  • 义乌做网站公司宣传营销方式有哪些
  • 深圳企业模板网站建设自助建站系统软件
  • 西安网站制作公司排关键词推广和定向推广
  • 济宁市住房和城乡建设局网站杭州网站seo优化
  • wordpress无限加载提升关键词排名seo软件
  • 百度推广时间段在哪里设置武汉seo百度
  • 黄江镇做网站杭州seo排名优化
  • 扬州网站建设推广专家泉州seo按天计费
  • wordpress barthelmeseo技术快速网站排名
  • 个人网站建设方案书范文上海今天最新新闻10条
  • 合肥生态丽景网站建设360关键词排名推广
  • 一加网站开发策划公司
  • 汉滨区建设局网网站买友情链接有用吗
  • 烟台服装定制廊坊seo外包公司费用
  • 精品课程网站设计代码seo网站推广方式
  • 广州建网站的公司河北百度seo
  • 英文网站如何推广百度写作助手
  • 沧州市网站建设城关网站seo
  • 网站建设国内公司如何在各大平台推广
  • 惠州市住房和城乡建设局网站新人做外贸怎么找国外客户
  • 做好公司网站百度网盘人工客服
  • 网站排名权重怎么做灵感关键词生成器
  • 怎样用dw做网站主页关键词检测
  • 长沙县 网站建设网站的推广方案的内容有哪些
  • 网站后台栏目根据什么做的全国今日新增疫情
  • 加强统筹推进政府网站建设交易链接
  • 扎染毕业设计代做网站四川seo推广公司
  • 河北住建局与建设厅网站怎么推广比较好