Observer

23种设计模式-----行为模式

故事扮演 提交于 2020-08-16 23:56:43
行为模式: 关注系统中对象之间的相互交互,研究运行时对象之间的相互通信和协作,明确对象职责 1.模板方法模式(template method) 定义了一个操作中的算法 骨架 ,将某些步骤延迟到子类中实现。这样,新的子类可以在不改变一个算法结构的前提下重新定义该算法的某些特定步骤。 即:处理步骤父类中定义好,具体实现延迟到子类中定义。 开发中:数据库访问的封装、Junit单元测试、servlet中doGet/doPost方法调用、Hibernate中模板程序等等 银行案例: 1 public abstract class BankTemplateMethod { 2 3 // 具体方法 4 public void takeNumber() { 5 System.out.println("取号排队" ); 6 } 7 8 // 办理具体业务 、钩子方法 9 public abstract void transact(); 10 public void evaluate() { 11 System.out.println("反馈评分" ); 12 } 13 14 // 模板方法 15 public final void process() { 16 this .takeNumber(); 17 18 this .transact(); 19 20 this .evaluate(); 21

JAVA设计模式之观察者模式

青春壹個敷衍的年華 提交于 2020-08-16 13:31:31
1、初步认识 观察者模式的定义:   在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。 大白话:   其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。 2、这个模式的结构图 3、可以看到,该模式包含四个角色 抽象被观察者角色 :也就是一个抽象主题,它把所有对观察者对象的引用保存在一个集合中,每个主题都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。 抽象观察者角色 :为所有的具体观察者定义一个接口,在得到主题通知时更新自己。 具体被观察者角色 :也就是一个具体的主题,在集体主题的内部状态改变时,所有登记过的观察者发出通知。 具体观察者角色 :实现抽象观察者角色所需要的更新接口,一边使本身的状态与制图的状态相协调。 4、使用场景例子   有一个微信公众号服务,不定时发布一些消息,关注公众号就可以收到推送消息,取消关注就收不到推送消息。 5、观察者模式具体实现 1、定义一个抽象被观察者接口 package com.jstao.observer; /** * * 抽象被观察者接口 * 声明了添加、删除、通知观察者方法 * @author jstao * */ public interface Observerable { public void

Vue 中的更改数组,和更改对象的规范及简单底层原理介绍

大城市里の小女人 提交于 2020-08-16 13:04:20
Vue 中的更改数组,和更改对象的规范及简单底层原理介绍 1.Vue 更改数组 对象的规范 在Vue中想要更改数组和对象中的数据同样得到页面的响应需要做到一些规范,这些规范是由Vue来设定的,以便能让代码性能提高。 数组 1.不能通过数组的索引(下标)去更改数组的值,这样不会渲染页面 。 eg: vm.arr[0] = 10; 虽然数组的数据修改成功,但是并不会渲染到页面. 2.不能通过更改数组长度的方式去更改数组,这样也不会渲染页面。 eg: vm.arr.length = 1; 同上,长度修改为1,页面依然未渲染. 3.解决方法 Vue提供了常见的七个数组变异方法来帮助我们修改数组且渲染 pop,shift,unshift,splice,sort,reverse,push 通过这些方法能达到我们想要的结果 对象 1.向对象内添加或者删除属性,不会渲染页面。 eg:vm.obj.c = 999; delete vm.obj.a; 2.解决方法 对象没有数组那样的变异方法解决 而是通过Vue创建的$.set 来解决 是英文的美元符 这里是引用 $ ) eg: vm.$set(this.obj,‘name’,‘kang’); 至于为什么数组和对象这些方式即使能修改数据却不会渲染到页面,则需要通过下面理解 Object.defineProperty 2.简单实例模拟添加方法 1

前端面试题-如何实现一个数组自己的MVVM模式

淺唱寂寞╮ 提交于 2020-08-16 07:36:38
  实现思路:   1. 实现一个数据监听器Observer,能够对数据对象的所有属性进行监听,如有变动可拿到最新值并通知订阅者   2.实现一个指令解析器Compile,对每个元素节点的指令进行扫描和解析,根据指令模板替换数据,以及绑定相应的更新函数   3. 实现一个Watcher,作为连接Observer和Compile的桥梁,能够订阅并收到每个属性变动的通知,执行指令绑定的相应回调函数,从而更新视图   实现过程代码:   创建一个数据监听器observer   functionobserver(data) {if(({}).toString.call(data) != '[object Object]') returnfor(var key in data) {}}functionobserveProperty(data) {Object,definedProperty(data, key, {},set() {}})}   添加一个订阅器,修改observeProperty方法   // 通过Object.definedProperty来实现数据劫持functionobserveProperty(data, key, val) {var dep = new Dep() observer(data) Object.definedProperty(data, key,

大话--观察者模式

喜夏-厌秋 提交于 2020-08-15 18:58:57
观察者模式: 定义: 定义了对象之间的一对多依赖,让多个观察者(Observer)同时监听某一主题对象(Subject)。当主题对象变化时,所有观察者都会收到通知并更新。 核心代码是在抽象类中有一个ArrayList用来存放观察者们。 使用场景: 一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立地改变和复用。 一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变,可以降低对象之间的耦合度。 一个对象必须通知其他对象,而并不知道这些对象是谁。 需要在系统中创建一个触发链,A对象的行为将影响B对象,B对象的行为将影响C对象……,可以使用观察者模式创建一种链式触发机制。 优点: 观察者和被观察者是抽象耦合的;建立了一套触发机制 缺点: 1、如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。 2、如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。 3、观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。 组成: 主题对象(Subject)具有注册和移除观察者、并通知所有观察者的功能,主题是通过维护一张观察者列表来实现这些操作的。 观察者(Observer

2020-05-30 Beta冲刺第三天

半世苍凉 提交于 2020-08-15 10:06:54
这个作业属于哪个课程 课程地址 这个作业要求在哪里 作业地址 这个作业的目标 2020-05-30 Beta冲刺第三天 作业正文 作业正文地址 其他参考文献 《构建之法现代软件工程》 明日安排 学号 项目内容 221600137 检查数据接口 221701117 回复评论功能的前端显示,优化代码,缩短访问时间 221701135 对推荐和话题页面则边栏的热门话题进行调整和增加跳转 221701216 完善问卷、测试功能 221701239 完成搜索页以及剩下数据渲染 221701334 继续完成前端需要的方法 221701419 继续修改积分方面的一个bug,以及CSS代码的重构 021700531 继续完成下面的功能 221701315 测试项目,查找bug并且给出前端的界面部分的修改建议 昨日完成的项目内容 学号 项目内容 花费时间 剩余时间 221600137 解决数据接口不良问题 100 1000 221701117 完善词云(标签云、分类云)。点赞取消,判断已赞,评论部分添加子级评论,解决点击下一页后的点赞数未渲染问题 300 840 221701135 对推荐页面的支付功能进行修复,并且对推荐页面样式进行适当的调整。为避免图片预览时进行下载,屏蔽了推荐页面点击鼠标右键 180 660 221701216 设计问卷、测试功能 120 390 221701239

全面改革:解读 Vue 3.0 的变化

故事扮演 提交于 2020-08-15 06:33:07
9月30日,尤雨溪在medium个人博客上发布了vue3.0的开发思路,国内有翻译的版本,见文章最后的参考链接。3.0带了了很大的变化,他讲了一些改进的思路以及整个开发流程的规划。 vue3.0的改进思路 vue最主要的特点就是响应式机制、模板、以及对象式的组件声明语法,而3.0对这三部分都做了更改。 1. 响应式 2.x的响应式是基于Object.defineProperty实现的代理,兼容主流浏览器和ie9以上的ie浏览器,能够监听数据对象的变化,但是监听不到 对象属性的增删 、 数组元素和长度的变化 ,同时会在vue初始化的时候把所有的Observer都建立好,才能观察到数据对象属性的变化。 针对上面的问题,3.0进行了革命性的变更,采用了ES2015的Proxy来代替Object.defineProperty,可以做到监听对象属性的增删和数组元素和长度的修改,还可以监听Map、Set、WeakSet、WeakMap,同时还实现了惰性的监听,不会在初始化的时候创建所有的Observer,而是会在用到的时候才去监听。但是,虽然主流的浏览器都支持Proxy,ie系列却还是不兼容,所以针对ie11,vue3.0决定做单独的适配,暴露出来的api一样,但是底层实现还是Object.defineProperty,这样导致了ie11还是有2.x的问题。但是绝大部分情况下,3

RxJava2.0(转载)

放肆的年华 提交于 2020-08-15 05:39:06
零、来源 来源: Carson_Ho-简书 一、基础知识 角色 作用 类比 被观察者(Observable) 产生事件 顾客 观察者(Observer) 接收事件,并给出响应动作 厨房 订阅(Subscribe) 连接 被观察者 & 观察者 服务员 事件(Event) 被观察者 & 观察者 沟通的载体 菜式 二、基础使用 1.导入连接 implementation 'io.reactivex.rxjava2:rxjava:2.2.19' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' 2.创建被观察者 //创建被观察者,产生事件 public Observable<Integer> createObservable() { Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(ObservableEmitter<Integer> e) throws Exception { e.onNext(1); e.onNext(2); e.onNext(3); e.onComplete(); } }); return observable; } 3

设计模式-总揽

六眼飞鱼酱① 提交于 2020-08-15 03:28:36
Dessign Pattern Overview 目录 Dessign Pattern Overview Overview Core Concepts Design Principle Refactoring to Patterns GOF-23 Encapsulate Change Overview 在 软件工程 中, 设计模式 (design pattern)是对 软件设计 中普遍存在(反复出现)的各种问题,所提出的解决方案。这个术语是由 埃里希·伽玛 (Erich Gamma)等人在1990年代从 建筑设计 领域引入到 计算机科学 的。 设计模式并不直接用来完成 代码 的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。 面向对象 设计模式通常以 类别 或 对象 来描述其中的关系和相互作用,但不涉及用来完成应用程序的特定类别或对象。设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设计面对并适应变化的能力。 引用自维基百科 Core Concepts 变化是复用的天敌,本质是找到变化,封装变化,提高可复用性 如果一个系统所有点都在变化或者一直不变,是不能用设计模式来解决的 Design Principle 依赖倒置原则(DIP) 高层模块(稳定)不应该依赖于低层模块(变化),二者都应当依赖于抽象(稳定) 抽象(稳定

2020-05-30 Beta冲刺第三天

天涯浪子 提交于 2020-08-15 03:10:08
这个作业属于哪个课程 课程地址 这个作业要求在哪里 作业地址 这个作业的目标 2020-05-30 Beta冲刺第三天 作业正文 作业正文地址 其他参考文献 《构建之法现代软件工程》 明日安排 学号 项目内容 221600137 检查数据接口 221701117 回复评论功能的前端显示,优化代码,缩短访问时间 221701135 对推荐和话题页面则边栏的热门话题进行调整和增加跳转 221701216 完善问卷、测试功能 221701239 完成搜索页以及剩下数据渲染 221701334 继续完成前端需要的方法 221701419 继续修改积分方面的一个bug,以及CSS代码的重构 021700531 继续完成下面的功能 221701315 测试项目,查找bug并且给出前端的界面部分的修改建议 昨日完成的项目内容 学号 项目内容 花费时间 剩余时间 221600137 解决数据接口不良问题 100 1000 221701117 完善词云(标签云、分类云)。点赞取消,判断已赞,评论部分添加子级评论,解决点击下一页后的点赞数未渲染问题 300 840 221701135 对推荐页面的支付功能进行修复,并且对推荐页面样式进行适当的调整。为避免图片预览时进行下载,屏蔽了推荐页面点击鼠标右键 180 660 221701216 设计问卷、测试功能 120 390 221701239