观察者模式

2019.10.17 MVC

时间秒杀一切 提交于 2019-12-01 16:01:47
MVC无人不知,可很多程序员对MVC的概念的理解似乎有误,换言之他们一直在错用MVC,尽管即使如此软件也能被写出来,然而软件内部代码的组织方式却是不科学的,这会影响到软件的可维护性、可移植性,代码的可重用性。 MVC即Model、View、Controller即模型、视图、控制器。我在和同行讨论技术,阅读别人的代码时发现,很多程序员倾向于将软件的业务逻辑放在Controller里,将数据库访问操作的代码放在Model里。 最终软件(网站)的代码结构是,View层是界面,Controller层是业务逻辑,Model层是数据库访问。 不知道大家知不知道另外一种软件开发模式三层架构,它和MVC相似之处是也分为三层,分别是UI层表示用户界面,BLL层表示业务逻辑,DAL层表示数据访问。三层架构曾经红极一时,MVC大行其道之后它就销声匿迹了, 可现在看来, 它似乎只是改头换面, 装扮成MVC的样子,并且深受程序员们的欢迎,因为它的这种分层方式和前文描述的MVC如出一辙。 再说的直白点,很多程序员将MVC当成了三层架构在用,这看起来似乎没什么问题,毕竟三层架构也是一种和MVC齐名的架构模式。可问题在于用三成架构的思路写MVC,那么写出来的东西既不是三成架构也不是MVC,到是像一个什么都不是四不像。熟悉天龙八部的同学应该知道这样一段情节

设计模式--观察者模式

ぃ、小莉子 提交于 2019-12-01 08:56:10
主题Subject接口 public interface Subject { public void registerObesrver(Observer observer); public void removeObeserver(Observer observer); public void notifyObeservers(); } 天气数据 public class WeatherData implements Subject { private Double temperate = null; // ArrayList默认容量为10,当大量添加observers,可能存在性能问题 private List<Observer> observers = new ArrayList<>(); public Double getTemperate() { return temperate; } public void setTemperate(Double temperate) { this.temperate = temperate; notifyObeservers(); } @Override public void registerObesrver(Observer observer) { observers.add(observer); } @Override

java设计模式--观察者模式和事件监听器模式

烂漫一生 提交于 2019-12-01 08:17:15
观察者模式 观察者模式又称为订阅—发布模式,在此模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来事件处理系统。。 基于事件驱动机制的系统或语言,比如node.js、nio等,不难发现其最终的基础模式就是观察者模式,只是不同的应用场景,也会有各自不同的侧重。 观察者 class Watcher implements java.util.Observer { public void update(java.util.Observable obj, Object arg) { System.out.println("Update() called, count is " + ((Integer) arg).intValue()); } }    被观察者 class BeingWatched extends java.util.Observable { void counter(int period) { for(; period>=0; period-- ) { setChanged(); notifyObservers(new Integer(period)); try { Thread.sleep(100); } catch( InterruptedException e) {

[转]23种设计模式总结

瘦欲@ 提交于 2019-12-01 08:04:32
1.单例模式(Singleton Pattern) 定义: Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。) 通用代码:(是线程安全的) public class Singleton { private static final Singleton singleton = new Singleton(); //限制产生多个对象 private Singleton(){ } //通过该方法获得实例对象 public static Singleton getSingleton(){ return singleton; } //类中其他方法,尽量是static public static void doSomething(){ } } 使用场景: ● 要求生成唯一序列号的环境; ● 在整个项目中需要一个共享访问点或共享数据,例如一个Web页面上的计数器,可以不用把每次刷新都记录到数据库中,使用单例模式保持计数器的值,并确保是线程安全的; ● 创建一个对象需要消耗的资源过多,如要访问IO和数据库等资源; ● 需要定义大量的静态常量和静态方法(如工具类)的环境,可以采用单例模式(当然

责任链模式和观察者模式实现一个简易的架构(一)

自作多情 提交于 2019-12-01 07:20:25
场景描述:   以金融行业的贷款业务为例,客户提交贷款申请,即进件。系统针对进件需要做一系列处理:保存申请信息、保存客户信息、对客户评分、触发风控检查、埋点、消推等。 传统编码方式:    竖向编程方式,就是按照逻辑一步一步执行。这样做的缺点,就是代码耦合度太高。 使用责任链模式和观察者模式解耦:   责任链模式:以单向链表为结构,一步一步执行,每一个businessHandlerContext(对应一个businessHandler)为一个执行单元,代码解耦。所有的操作属于一个事务。   观察者模式:针对需要异步处理的操作,与主流程无关,如埋点、消推等,使用线程池方式异步执行Listener。 架构设计如下: 1、从Head开始执行,一直到Tail结束 2、每一个执行单元对应一个自定义的businessHandler,执行完,需向下传递 3、在Tail中以线程池的方式异步执行Listener 总结:将设计模式应用到架构设计中,让我们的系统更加优雅、可靠、稳定、维护性高。 来源: https://www.cnblogs.com/dushenzi/p/11668023.html

设计模式(九):观察者模式

烂漫一生 提交于 2019-12-01 00:36:33
如果你听说过RxJava的话,就应该听说过这种模式。这种模式最大的优点就是将被观察者和观察者解耦,增强了程序的灵活性和可扩展性 那么观察者模式可以运用到什么场景中呢? 举个现实中典型的例子,当你订阅了一份杂志时,就使用了这种模式,你只需要订阅这份杂志,那么只要杂志更新了就会自动送到你的手上。 当然,观察者模式的用途远不止这些,但是处理的事件类型,就类似这种。 对于初学者来说,观察者模式容易混淆的就是一些英文名词了,这里先解释一下,还是拿你订阅杂志这件事来举例: 观察者:Observer,有时候也叫Subscriber(订阅者),相当于那个订阅杂志的”你” 被观察者:Observable这个单词的意思是可观察的,也就是说可观察的对象被称为被观察者,有时候也叫Subject(主题),相当于被订阅的杂志 能否理解观察者模式,这两个名词的理解至关重要! Observer(观察者模式)的UML类图 Subject:主题,被观察者 ConcreteSubject:具体的被观察者 Observer:观察者 ConcreteObserver:具体的观察者 在上面的 UML 类图中,可以看到 Subject 与 Observer 有一个相互操作的过程。在观察者模式中,观察者只需要实现一个订阅操作,当主题或者被观察者有了什么变化,只需要通过一个修改操作就可以使所有的观察者得到相应,颇有一种

设计模式(九):观察者模式

六眼飞鱼酱① 提交于 2019-12-01 00:35:13
如果你听说过RxJava的话,就应该听说过这种模式。这种模式最大的优点就是将被观察者和观察者解耦,增强了程序的灵活性和可扩展性 那么观察者模式可以运用到什么场景中呢? 举个现实中典型的例子,当你订阅了一份杂志时,就使用了这种模式,你只需要订阅这份杂志,那么只要杂志更新了就会自动送到你的手上。 当然,观察者模式的用途远不止这些,但是处理的事件类型,就类似这种。 对于初学者来说,观察者模式容易混淆的就是一些英文名词了,这里先解释一下,还是拿你订阅杂志这件事来举例: 观察者:Observer,有时候也叫Subscriber(订阅者),相当于那个订阅杂志的”你” 被观察者:Observable这个单词的意思是可观察的,也就是说可观察的对象被称为被观察者,有时候也叫Subject(主题),相当于被订阅的杂志 能否理解观察者模式,这两个名词的理解至关重要! Observer(观察者模式)的UML类图 Subject:主题,被观察者 ConcreteSubject:具体的被观察者 Observer:观察者 ConcreteObserver:具体的观察者 在上面的 UML 类图中,可以看到 Subject 与 Observer 有一个相互操作的过程。在观察者模式中,观察者只需要实现一个订阅操作,当主题或者被观察者有了什么变化,只需要通过一个修改操作就可以使所有的观察者得到相应,颇有一种

设计模式(九):观察者模式

江枫思渺然 提交于 2019-12-01 00:08:02
如果你听说过RxJava的话,就应该听说过这种模式。这种模式最大的优点就是将被观察者和观察者解耦,增强了程序的灵活性和可扩展性 那么观察者模式可以运用到什么场景中呢? 举个现实中典型的例子,当你订阅了一份杂志时,就使用了这种模式,你只需要订阅这份杂志,那么只要杂志更新了就会自动送到你的手上。 当然,观察者模式的用途远不止这些,但是处理的事件类型,就类似这种。 对于初学者来说,观察者模式容易混淆的就是一些英文名词了,这里先解释一下,还是拿你订阅杂志这件事来举例: 观察者:Observer,有时候也叫Subscriber(订阅者),相当于那个订阅杂志的”你” 被观察者:Observable这个单词的意思是可观察的,也就是说可观察的对象被称为被观察者,有时候也叫Subject(主题),相当于被订阅的杂志 能否理解观察者模式,这两个名词的理解至关重要! Observer(观察者模式)的UML类图 Subject:主题,被观察者 ConcreteSubject:具体的被观察者 Observer:观察者 ConcreteObserver:具体的观察者 在上面的 UML 类图中,可以看到 Subject 与 Observer 有一个相互操作的过程。在观察者模式中,观察者只需要实现一个订阅操作,当主题或者被观察者有了什么变化,只需要通过一个修改操作就可以使所有的观察者得到相应,颇有一种

观察者模式

|▌冷眼眸甩不掉的悲伤 提交于 2019-11-30 23:15:18
观察者模式 标签(空格分隔): 设计模式 观察者模式: 当对象之间存在一对多的关系的时候, 则使用观察者模式. 比如当一个对象呗修改的时候, 则会自动通知他的依赖对象, 观察者模式属于行为模式 优点 观察者模式实现了动态联动 观察者模式实现了广播通信 缺点 如一个主题被大量观察者观察, 则通知所有的观察者的代价较高. 如果某些观察者的相应方法被阻塞, 整个通知过程也会被阻塞, 其他观察者不能及时被通知. public interface Observer { void update(String info); } public class StudentObserver implements Observer { private String name; public StudentObserver(String name) { this.name = name; } @Override public void update(String info) { System.out.println(name+"收到消息"+info); } } import java.util.ArrayList; import java.util.List; public interface Subject{ void registerObserver(Observer observer); void

设计模式——观察者模式

给你一囗甜甜゛ 提交于 2019-11-30 18:38:50
https://www.cnblogs.com/luohanguo/p/7825656.html 1、定义一个抽象被观察者接口 package com.jstao.observer; /*** * 抽象被观察者接口 * 声明了添加、删除、通知观察者方法 * @author jstao * */ public interface Observerable { public void registerObserver(Observer o); public void removeObserver(Observer o); public void notifyObserver(); } 2、定义一个抽象观察者接口 package com.jstao.observer; /*** * 抽象观察者 * 定义了一个update()方法,当被观察者调用notifyObservers()方法时,观察者的update()方法会被回调。 * @author jstao * */ public interface Observer { public void update(String message); } 3、定义被观察者,实现了Observerable接口,对Observerable接口的三个方法进行了具体实现,同时有一个List集合,用以保存注册的观察者,等需要通知观察者时,遍历该集合即可。