event

使用C# (.NET Core) 实现观察者模式 (Observer Pattern) 并介绍 delegate 和 event

只愿长相守 提交于 2020-01-02 09:29:25
观察者模式 这里面综合了几本书的资料. 需求 有这么个项目: 需求是这样的: 一个气象站, 有三个传感器(温度, 湿度, 气压), 有一个WeatherData对象, 它能从气象站获得这三个数据. 还有三种设备, 可以按要求展示气象站的最新数据. WeatherData的结构如下: 有3个get方法, 分别获取最新的气温, 湿度和气压. 还有一个measurementsChanged()方法, 当任一传感器有变化的时候, 这个方法都会被调用. 总结一下项目的需求: WeatherData类有三个get方法可以获取温度, 湿度和气压 如果任何一个数据发生变化, 那么measureChanged()方法就会被调用 我们需要实现这三种显示设备:   当前天气   数据统计   天气预测 系统必须可以扩展, 其他开发者可以创建自定义展示设备. 初版代码 这个地方有个"错误", xxxDisplay都是具体的实现, 而编程规则要求是应该对接口编程而不是对实现编程. 那么什么是观察者模式? 举一个例子: 报社发行报纸 你订阅报纸, 一旦有新一期的报纸发行, 新报纸就会送到你家里, 只要你一直订阅, 你就一直会收到新报纸 你不再订阅报纸的时候, 就收不到以后的新报纸了 报社运营的时候, 一直会有人去订阅或者取消订阅报纸. 发布者 + 订阅者 = 观察者模式 Publishers +

Vue学习记录第一天

非 Y 不嫁゛ 提交于 2020-01-02 04:28:04
今天开始了Vue的学习,下面我就记录一下学习了什么。 1.什么是Vue? vue是一套基于javaScript的渐进式框架,是MVVM框架。View ——ViewModel——Model 其中View就是视图层, Model就是数据层,而中间的监控者就负责监控两侧的数据,并相对应地通知另一侧进行修改。比如,你在数据层改变了某个数据的值,那么视图层的数据也会修改。这个过程就是有ViewModel来操作的,不需要你手动地去写代码去实现(你不用再手动操作DOM了)。 2.Vue的基础知识点:  1)数据绑定,<p>{{name}}</p> 在标签里面绑定数据,通过两个大括号可以取得data里面想要显示的数据     eg:实例话一个对象在app.js里面     new Vue({       el:"#vue-app",       data:{         name:'hello'       }     });   2)vue的属性绑定方式:     <a v-bind:href="website" target="blank">百度首页</a>     <input type="text" v-bind:value="job"/>     <p v-html="websiteTag"></p>   3)vue事件绑定:     <div id="vue-app">     

vue2.0的contextmenu右键菜单

一个人想着一个人 提交于 2020-01-02 02:46:49
1.事情对象 <!DOCTYPE html> <html> <head> <title></title> <meta charset="utf-8"> <script src="http://unpkg.com/vue/dist/vue.js"></script> <script type="text/javascript"> window.onload = function(){ var vm = new Vue({ el:'#box', methods:{ show:function(event){ console.log(event); //event 这个就是事件对象了 } } }); } </script> </head> <body> <div id="box"> <input type="button" value="按钮" @click="show($event)"> </div> </body> </html> 通过show($event)把事件对象传到方法里 2.事件冒泡 <!DOCTYPE html> <html> <head> <title></title> <meta charset="utf-8"> <script src="http://unpkg.com/vue/dist/vue.js"></script> <script type="text

深入理解nodejs event loop机制

99封情书 提交于 2019-12-31 08:14:58
浏览器环境和nodejs环境的事件循环机制是不一样的,首先看一个demo: 在浏览器环境中运行结果如下: 在nodejs环境中运行结果如下: 上面例子说明浏览器和nodejs的时间循环是有区别的。 nodejs的事件处理 nodejs采用V8作为js的解析引擎,而I/O处理方面使用自己设计的libuv,libuv是一个基于事件驱动的跨平台抽象层,封装了不同操作系统的一些底层特性,对外提供统一API,事件循环机制也是在它里面实现的, 核心代码参考 : 根据Nodejs官方介绍,每次事件循环都包含了6个阶段,对应libuv源码中的实现,如下图: timers阶段:这个阶段执行timer(setTimeout、setInterval)的回调 I/O callbacks阶段:执行一些系统调用错误,比如网络通信的错误回调 idle,prepare阶段:仅供node内部使用 poll阶段:获取新的I/O事件,适当的条件下node将阻塞在这里 check阶段:执行setImmediate()的回调 close callbacks阶段:执行socket的close事件回调 重点看timers、poll、check这3个阶段,因为日常开发中的绝大部分异步都是在这3个阶段处理。 timers阶段 timers是事件循环的第一个阶段,node会去检查有无过期的timer

jQuery方法position()与offset()区别

╄→гoц情女王★ 提交于 2019-12-31 06:43:14
参考别人写得比较明白的,红色部分为重点吧: 使用jQuery获取元素位置时,我们会使用position()或offset()方法,两个方法都返回一个包含两个属性的对象-左边距和上边距,它们两个的不同点在于位置的相对点不同。 可以看看下边的图: 从图中我们可以大体看出两者的区别。 position()获取相对于它最近的具有相对位置(position:relative)的父级元素的距离,如果找不到这样的元素,则返回相对于浏览器的距离。 offset()始终返回相对于浏览器文档的距离,它会忽略外层元素 下边看个简单的例子,这里外层的div元素(position:relative)仅一个: <divid="outer"style="width:200px;position:relative;left:100px;"><divid="inner"style="position:absolute;left:50px;top:60px;"></div></div> //获取相对于最近的父级(position:relative)的位置var vposition = $("#inner").position(); alert(vposition.left);//输出:50 alert(vposition.top);//输出:60var voffset = $("#inner").offset();

Android消息传递之EventBus

拥有回忆 提交于 2019-12-30 08:49:02
EventBus产生需求背景: 在做项目的时候往往需要应用程序内各组件间、组件与后台线程间的通信。比如耗时操作,等耗时操作完成后通过Handler或Broadcast将结果通知给UI,N个Activity之间需要通过Listener通信,其实这些都可以通过EventBus轻松实现,EventBus通过发布/订阅(publish/subscribe)方式来管理事件总。EventBus通过注解和反射机制 将订阅者连同订阅函数保存起来,然后在发送订阅的时候 遍历订阅函数数组进行调用,其实从这方面就可以EventBus执行效率多少会受到一点影响。 github地址:https://github.com/greenrobot/EventBus EventBus主要角色: Event 传递的事件对象 Subscriber 事件的订阅者 Publisher 事件的发布者 ThreadMode 定义函数在何种线程中执行 官网给出的各种角色的协作图 EventBus配置: EventBus框架也是采用建造者模式设计的,可以通过EventBusBuilder来设置一些配置信息,例如设置debug模式下要抛出异常 EventBus示例: 之前做图片类项 的时候,需要处理一个点赞数据的同步,比如在作品的详情页点赞 需要同时更新列表页该作品的点赞数量,这里还是以此为例。  1.)build

socket方法

夙愿已清 提交于 2019-12-30 01:18:44
// 创建一个Socket实例 var socket = new WebSocket('ws://192.168.2.72:8430'); // 打开Socket socket.onopen = function (event) { //username,msg // 发送一个初始化消息 socket.send('I am the client and I\'m listening!'); // 监听消息 socket.onmessage = function (event) { console.log('Client received a message', event); }; // 监听Socket的关闭 socket.onclose = function (event) { console.log('Client notified socket has closed', event); }; // 关闭Socket.... //socket.close() }; 来源: https://www.cnblogs.com/leijuan/p/6111610.html

Zabbix4配置邮件告警通知

江枫思渺然 提交于 2019-12-29 23:13:07
环境: OS:centos7.4 zabbix Server:zabbix_server (Zabbix) 4.0.14 1. mail配置 确认邮件发送工具已安装 yum install mailx -y 配置 /etc/mail.rc,尾部加入配置项: # Add mail-conf by yuhuanghui set from=stupidking123@163.com set smtp=smtp.163.com set smtp-auth-user=123456 set smtp-auth-password=password1 #授权码 set smtp-auth=login set ssl-verify=ignore mail授权, chown -R zabbix:zabbix /etc/mail.rc 注:这里文件未授权导致邮件发送不出去,zabbix Web中动作日志显示已发送,但实际上邮箱并未收到,搞了N天。 除了需开通SMTP服务外,还需要开通授权码登录,上面配置不再是登录密码,而是授权码。这里选择163邮箱发送。 2. 编写邮件发送脚本 cd /usr/lib/zabbix/alertscripts vim mail-send.sh #!/bin/bash messages=`echo $3 | tr '\r\n' '\n'` subject=`echo $2

PatentTips - Optimizing power usage by factoring processor architectural events to PMU

别等时光非礼了梦想. 提交于 2019-12-29 22:23:26
BACKGROUND Processor power consumption has become a major issue in recent years. The current trend of processor design to multi-core architecture as eased the pressure on power consumption. However, power consumption still grows linearly with the number of cores being designed. Recent developments in technology have provided new opportunities to further optimize power consumptions. However, these technologies still have several downsides. Specifically, within the new technologies, OS does not understand how effectively the workload is running in the hardware and the associated power cost in

Event对象跨浏览器兼容性写法

拟墨画扇 提交于 2019-12-29 13:37:45
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Event对象跨浏览器兼容性写法</title> </head> <body> <script> var EventUtil={ //添加事件 addHandler:function(element,type,handler){ if (element.addEventListener){ element.addEventListener(type,handler,false); }else if(element.attachEvent){ element.attachEvent("on"+type,handler); }else{ element["on"+type]=handler; } }, //移除事件 removeHandler:function (element,type,handler){ if (element.removeEventListener){ element