首页 > 其他分享 >观察者设计模式

观察者设计模式

时间:2022-12-28 12:34:32浏览次数:33  
标签:name 观察者 System weather println 设计模式 public out


观察者设计模式:观察者设计模式解决问题时,当一个对象发生指定的动作时,要通知另外一个对象做出相应的处理。





观察者设计模式的步骤:


    1.当目前对象发生指定动作时,要通知另外一个对象做出相应的处理,这时候应该把对方的相应处理方法定义在接口上。


    2.在当前对象维护接口的引用,当当前对象发生指定的动作时,即可调用接口中的方法了。


需求:编写一个气象站、一个工人 两个类,当气象站更新天气的时候,要通知人做出相应的处理。


package com.cn.observerModel;
import java.util.ArrayList;
import java.util.Random;
/**
* Author:Liu Zhiyong(QQ:1012421396)
* Version:Version_1
* Date:2016年8月26日11:12:57
* Desc:
观察者设计模式:观察者设计模式解决问题时,当一个对象发生指定的动作时,要通知另外一个对象做出相应的处理。
需求:编写一个气象站、一个工人 两个类,当气象站更新天气的时候,要通知人做出相应的处理。
观察者设计模式的步骤:
1.当目前对象发生指定动作时,要通知另外一个对象做出相应的处理,这时候应该把对方的相应处理方法定义在接口上。
2.在当前对象维护接口的引用,当当前对象发生指定的动作时,即可调用接口中的方法了。
*/
public class WeatherStation {
String[] weathers = {"晴天", "刮风", "雾霾", "冰雹", "下雪"};

//当前的天气
String weather;

//该集合中存储的都是需要接收天气预报的人
ArrayList<Weather> list = new ArrayList<Weather>();

//添加收听对象
public void addListener(Weather w){
list.add(w);
}

//更新天气的方法
public void updateWeather(){
Random random = new Random();
int index = random.nextInt(weathers.length);

weather = weathers[index];
System.out.println("当前的天气是:" + weather);
}

//开始工作
public void startWork(){
final Random random = new Random();
new Thread(){//匿名内部类
public void run() {
while(true){//每1~1.5秒更新一次天气
updateWeather();
//推送天气到每一位需要接收的对象
for(Weather w : list){
w.notifyWeater(weather);
}
int time = 1000 + random.nextInt(501);
try {
Thread.sleep(time);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
}.start();
}
}

package com.cn.observerModel;
import java.util.Random;
public class WeatherMain {
public static void main(String[] args) throws InterruptedException {
WeatherStation weatherStation = new WeatherStation();
Employee e1 = new Employee("木丁西");
Employee e2 = new Employee("高圆圆");
Student s1 = new Student("佟亚丽");
Student s2 = new Student("刘先生");

weatherStation.addListener(e1);
weatherStation.addListener(e2);
weatherStation.addListener(s1);
weatherStation.addListener(s2);
weatherStation.startWork();
}
}

package com.cn.observerModel;
/**
* 订阅天气预报的接口
* @author zhiyong
*
*/
public interface Weather {
public void notifyWeater(String weather);
}
package com.cn.observerModel;
/**
* 工人类
* @author zhiyong
*
*/
public class Employee implements Weather{
String name;
public Employee(String name) {
this.name = name;
}

//人根据天气做出相应的处理
public void notifyWeater(String weather){
if("晴天".equals(weather)){
System.out.println(name + "高高兴兴去上班。。。。");
}else if("雾霾".equals(weather)){
System.out.println(name + "戴着口罩去上班。。。。");
}else if("刮风".equals(weather)){
System.out.println(name + "拖着大石头去上班。。。。");
}else if("冰雹".equals(weather)){
System.out.println(name + "戴着头盔去上班。。。。");
}else if("下雪".equals(weather)){
System.out.println(name + "披着被子去上班。。。。");
}
}
package com.cn.observerModel;
public class Student implements Weather{
String name;
public Student(String name) {
this.name = name;
}

//人根据天气做出相应的处理
public void notifyWeater(String weather){
if("晴天".equals(weather)){
System.out.println(name + "快快乐乐去上学。。。。");
}else if("雾霾".equals(weather)){
System.out.println(name + "捂着嘴去上学。。。。");
}else if("刮风".equals(weather)){
System.out.println(name + "顶着大风去上学。。。。");
}else if("冰雹".equals(weather)){
System.out.println(name + "在家睡大觉。。。。");
}else if("下雪".equals(weather)){
System.out.println(name + "溜着冰去上学。。。。");
}

标签:name,观察者,System,weather,println,设计模式,public,out
From: https://blog.51cto.com/u_15769923/5974294

相关文章

  • 工厂设计模式
    工厂设计模式作用:就是用于生产对象的。一、在Java项目中packagecom.cn.factory;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileReade......
  • 设计模式之“状态模式(State)”(未完整)
    一、状态模式(State)状态模式是当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 二、状态模式的作用状态模式主要解决的是当控制一个对象状态转......
  • 实践GoF的23种设计模式:命令模式
    摘要:命令模式可将请求转换为一个包含与请求相关的所有信息的对象,它能将请求参数化、延迟执行、实现Undo/Redo操作等。本文分享自华为云社区《【Go实现】实践GoF的23......
  • 23种设计模式 之 快速记忆
    导读本文仅仅是设计模式知识点汇总,适用于备考、想要装b的情况,不适用想要详细钻研学习的情况。1、什么叫做设计模式设计模式是解决方案!设计模式是解决反复出现问题......
  • 为什么说每个程序员都要尽早掌握设计模式相关知识?
    分享下前Google工程师「王争」对于这个话题的思考。 大家好,我是王争。 我相信,很多程序员都已经意识到基础知识的重要性,觉得要夯实基础,才能走得更远,但同时对于如何将基础......
  • 行为型:设计模式之状态模式(十八)
    “人有悲欢离合,月有阴晴圆缺”,包括人在内,很多事物都具有多种状态,而且在不同状态下会具有不同的行为,这些状态在特定条件下还将发生相互转换。就像水,它可以凝固成冰,也可以受热......
  • 行为型:设计模式之中介者模式(十四)
    腾讯公司推出的QQ作为一款免费的即时聊天软件深受广大用户的喜爱,它已经成为很多人学习、工作和生活的一部分(不要告诉我你没有QQ哦,)。在QQ聊天中,一般有两种聊天方式:第一种是用......
  • 创建型:设计模式之单例模式(三)
    3.1单例模式的动机对于一个软件系统的某些类而言,我们无须创建多个实例。举个大家都熟知的例子——Windows任务管理器,如图3-1所示,我们可以做一个这样的尝试,在Windows的“任......
  • UML设计模式符号答疑
    在UML类图中,常见的有以下几种关系:泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency) 1.泛化(Generalization)......
  • 1个月连载30个设计模式真实案例,挑战年薪60W不是梦
    本文所有内容均节选自《设计模式就该这样学》本文自2021年10月29日起持续连载,请大家持续关注....序言DesignPatterns:ElementsofReusableObject-OrientedSoft......