春节假期过一半了,慌不慌?

2023-10-22 12:40

本文主要是介绍春节假期过一半了,慌不慌?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

不知不觉春节假期过一半了,马上接近尾声了,不知道大家假期过得怎么样,可能都吃胖了几斤,又被长辈唠叨了几句,给家里小辈发了红包,自己也收到了红包?应该是一片祥和吧。

没有回家的我,选择了待在这个有这王者之气的帝都,过得也还阔以吧。

不同人对待假期倒计时有不同的想法。

有些人可能着急去上班,因为他是资本家,等着打工人给他赚钱呢。

有些人可能抵触上班,因为他是打工人,天天被买办欺负。

有些人可能无所谓,因为工作也很轻松,还有很多同事可以一起,很happy.

那我们就根据面对假期时的不同反应,来讲一个设计模式——观察者模式

一、 是什么

观察者模式,是指多个对象之间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。

这种模式也叫:发布—订阅模式、模型-视图模式。

它长这样:

在这里插入图片描述

Subject:

抽象主题(抽象目标类):他提供一个用于保存观察者对象的聚集类和增加、删除观察者对象的方法,以及通知所有观察者

ConcreteSubject:

具体主题(具体目标类):它实现抽象目标中的通知方法,当具体主题内部状态发生变化的时候,通知所有注册过的观察对象

Observer:

抽象观察者,它是一个抽象类(或接口),包含了一个更新自己(根据抽象主题状态变化做相应操作)的抽象方法,

ConcreteObserver:

具体观察者,实现抽象观察者中定义的抽象方法,以便在得到目标的更改通知时更新自身状态。

二、实现它

我们定义一个假期对象(被观察者),这个对象有一个状态位从7变换到0 ,

他有2个订阅者(也就是观察者),他们根据不同的假期天数,作出相应的动作。

Observer

package observer;/*** @author 木子的昼夜编程* 观察者 抽象*/
public interface Observer {void response(Integer obj);
}

CapitalistObserver

package observer;/*** @author 木子的昼夜编程* 资本家*/
public class CapitalistObserver implements Observer{@Overridepublic void response(Integer obj) {if (obj == null || obj < 0) {System.out.println("珍惜生命吧!");return;}switch (obj){case 7:System.out.println("资本家:放假第1天,难受,工人拿着免费工资。");break;case 6:System.out.println("资本家:放假第2天,难受,工人拿着免费工资。");break;case 5:System.out.println("资本家:放假第3天,难受,工人拿着免费工资。");break;case 4:System.out.println("资本家:放假第4天,难受,工人拿着免费工资。");break;case 3:System.out.println("资本家:放假第5天,难受,工人拿着免费工资。");break;case 2:System.out.println("资本家:放假第6天,难受,工人拿着免费工资。");break;case 1:System.out.println("资本家:放假第7天,难受,工人拿着免费工资。");break;case 0:System.out.println("资本家:爽呆呆,开始压榨工人了。");break;}}
}

WorkerObserver

package observer;/*** @author 木子的昼夜编程* 打工人*/
public class WorkerObserver implements Observer{@Overridepublic void response(Integer obj) {if (obj == null || obj < 0) {System.out.println("珍惜生命吧!");return;}switch (obj){case 7:System.out.println("打工人:哇!放假了,爽呆呆!。");break;case 6:System.out.println("打工人:还有6天,好无聊。");break;case 5:System.out.println("打工人:还有5天,真爽!");break;case 4:System.out.println("打工人:还有四天,使劲儿造!。");break;case 3:System.out.println("打工人:还有三天呢,可劲儿造!。");break;case 2:System.out.println("打工人:就剩2天啦!!。");break;case 1:System.out.println("打工人:我的天最后一天啦!。");break;case 0:System.out.println("打工人:开始被剥削。");break;}}
}

Subject

package observer;import java.util.ArrayList;
import java.util.List;/*** @author 木子的昼夜编程* 抽象目标类*/
public abstract class Subject {List<Observer> observers;Integer day;public Subject(){//初始化7天day = 7;// 初始化观察者observers = new ArrayList<>();}// 设置删除观察者public void addObserver(Observer observer){observers.add(observer);}public void removeObserver(Observer observer){observers.remove(observer);}// 天数减1public abstract void OneDayless();public abstract  void notifyObserver();
}

HolidaysSubject

package observer;/*** @author 木子的昼夜编程* 具体目标类:假期*/
public class HolidaysSubject extends Subject {// 天数减1@Overridepublic void OneDayless(){notifyObserver();day--;}@Overridepublic void notifyObserver() {for (int i = 0; i < observers.size(); i++) {observers.get(i).response(day);}}
}

Client

package observer;/*** @author 木子的昼夜编程*/
public class Client {public static void main(String[] args) {Subject subject = new HolidaysSubject();Observer holidaysSubject =  new WorkerObserver();Observer capitalistObserver = new CapitalistObserver();subject.addObserver(holidaysSubject);subject.addObserver(capitalistObserver);// 一天一天过去了subject.OneDayless();subject.OneDayless();subject.OneDayless();subject.OneDayless();subject.OneDayless();subject.OneDayless();subject.OneDayless();subject.OneDayless();}
}

类之间关系:

在这里插入图片描述

输出结果:

在这里插入图片描述

三、 其他方式实现

我们直接用 java.util.Observer java.util.Observable

我们看一下用这俩类怎么实现:

HolidaysSubject

package observer02;import java.util.Observable;/*** @author 木子的昼夜编程* 具体目标类:假期*/
public class HolidaysSubject extends Observable {Integer day;public HolidaysSubject(){day = 7;}public void OneDayless(){// 通知观察者// 这个标志位一定要设置super.setChanged();super.notifyObservers(day);day--;}
}

CapitalistObserver

package observer02;import java.util.Observable;
import java.util.Observer;/*** @author 木子的昼夜编程*/
public class CapitalistObserver  implements Observer {@Overridepublic void update(Observable o, Object arg) {if (arg == null) {System.out.println("珍惜生命吧!");return;}Integer day = Integer.valueOf(arg.toString());switch (day){case 7:System.out.println("资本家:放假第1天,难受,工人拿着免费工资。");break;case 6:System.out.println("资本家:放假第2天,难受,工人拿着免费工资。");break;case 5:System.out.println("资本家:放假第3天,难受,工人拿着免费工资。");break;case 4:System.out.println("资本家:放假第4天,难受,工人拿着免费工资。");break;case 3:System.out.println("资本家:放假第5天,难受,工人拿着免费工资。");break;case 2:System.out.println("资本家:放假第6天,难受,工人拿着免费工资。");break;case 1:System.out.println("资本家:放假第7天,难受,工人拿着免费工资。");break;case 0:System.out.println("资本家:爽呆呆,开始压榨工人了。");break;}}
}

WorkerObserver

package observer02;import java.util.Observable;
import java.util.Observer;/*** @author 木子的昼夜编程* 打工人*/
public class WorkerObserver implements Observer {@Overridepublic void update(Observable o, Object arg) {if (arg == null) {System.out.println("珍惜生命吧!");return;}Integer day = Integer.valueOf(arg.toString());switch (day){case 7:System.out.println("打工人:哇!放假了,爽呆呆!。");break;case 6:System.out.println("打工人:还有6天,好无聊。");break;case 5:System.out.println("打工人:还有5天,真爽!");break;case 4:System.out.println("打工人:还有四天,使劲儿造!。");break;case 3:System.out.println("打工人:还有三天呢,可劲儿造!。");break;case 2:System.out.println("打工人:就剩2天啦!!。");break;case 1:System.out.println("打工人:我的天最后一天啦!。");break;case 0:System.out.println("打工人:开始被剥削。");break;}}
}

Client

package observer02;/*** @author 木子的昼夜编程*/
public class Client {public static void main(String[] args) {// 被观察者HolidaysSubject subject = new HolidaysSubject();// 观察者CapitalistObserver capitalistObserver = new CapitalistObserver();WorkerObserver workerObserver = new WorkerObserver();// 添加观察者subject.addObserver(capitalistObserver);subject.addObserver(workerObserver);// 时间消失subject.OneDayless();subject.OneDayless();subject.OneDayless();subject.OneDayless();subject.OneDayless();subject.OneDayless();subject.OneDayless();subject.OneDayless();}
}

输出结果就不看了,一样的。

四、唠唠

假期不多了,人总是在假期最后一天抱怨,没做很多事。还有初四、初五、初六。你可以做一下你想做的事儿。

这篇关于春节假期过一半了,慌不慌?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/261518

相关文章

C语言练习题之 数组中出现次数超过一半的数

题目描述 给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。 数据范围:n≤50000,数组中元素的值0≤val≤10000 要求:空间复杂度:O(1),时间复杂度O(n) 输入描述: 保证数组输入非空,且保证有

NYOJ 456 邮票分你一半

OJ题目 : http://acm.nyist.net/JudgeOnline/problem.php?pid=456 描述 小珂最近收集了些邮票,他想把其中的一些给他的好朋友小明。每张邮票上都有分值,他们想把这些邮票分成两份,并且使这两份邮票的分值和相差最小(就是小珂得到的邮票分值和与小明的差值最小),现在每张邮票的分值已经知道了,他们已经分好了,你知道最后他们得到的邮票分值和相差多少吗?

电量计导致的安卓开机一半自动关机故障

乘着正在启动没有熄火的时间内,赶紧在AS下adb logcat -b,看了下最后几行 09-04 16:53:01.246   466   970 I ShutdownThread: Performing low-level shutdown... 09-04 16:53:01.255     0     0 I init    : Received sys.powerctl='shutdown

这个pr让netty内存分配减少一半

netty nextReceiveBufferSize bug netty 4.1.42以及之前的版本 netty的动态内存计算可能是一个错误,请参阅netty源代码AdaptiveRecvByteBufAllocator.HandleImpl#record,如果actualReadBytes为2155,则var的最终结果nextReceiveBufferSize应为4196,但现实情况是它将

数组中出现次数超过一半的数字(Java)

题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1, 2, 3, 2, 2, 2, 5, 4, 2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。 第一思路: 给这个数组排好序,然后统计数组中每个数字在数组中出现的次数,然后看出现次数最多的这个元素的个数有没有大于数组长度的一半,有,则返回,没有返回0。 优化思路:基于pa

创建3个进程,子进1程拷贝文件的前一半,子进程2拷贝后一半文件,父进程回收两个子进程资源。

#include <myhead.h> int main (int argc, const char *argv[]) {     pid_t pid;     pid=fork();     if(pid>0)     {     pid_t pid2;     pid2=fork();     if(pid==0)     {         printf("子进程2");

信号处理中为什么用复信号——使信号处理中的频带减少一半

信号处理中为什么用复信号  (2013-03-24 18:25:55) 标签: 杂谈分类: 信号处理   此文章已于 18:28:13 2013/3/24 重新发布到 senlinlaoren的博客 信号处理中为什么用复信号         【何人(公司)所著】:Richard Lyonsbbs.cnttr.com+ }5 G) @' x6 t! l5 \1 v5 h

【小球下落反弹】小球自由落下,每次落地后反跳回原高度的一半

一小球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? 使用C语言实现,具体代码: #include<stdio.h>int main(){float sn=100.0,hn=sn/2;for(int n=2;n<=10;n++){sn=sn+2*hn;hn=hn/2;}printf("共经过%f米\n第10次反弹%f米高",

求数组中出现次数超过一半的数字

在一个数组中,某个数字出现的次数超过了数组元素总长度的一半,找出这个数字。 package com.threeTop.www;/*** 找出数组中超过一半的元素* @author wjgs**/public class MoreThanHalf {/*** O(n)时间复杂度解法* @param array*/public static void find(int[]array){int

数组中出现次数超过一半的数字 剑指offer python版

目录 题目一、思路二、代码三、总结 题目 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 示例1 输入 [1,2,3,2,2,2,5,4,2] 返回值 2 一、思路 【思路】 随时