当前位置: 首页 > news >正文

男女做那个那个的视频网站网站制作费用

男女做那个那个的视频网站,网站制作费用,海南省建设银行官方网站招聘,武汉 做土建工作去哪个网站文章目录 一、观察者模式定义二、例子2.1 菜鸟教程例子2.1.1 定义观察者2.1.2 定义被观察对象2.1.3 使用 2.2 JDK源码 —— Observable2.2.1 观察者接口Observer2.2.1 被观察者对象Observable 2.3 Spring源码 —— AbstractApplicationContext2.3.1 观察者2.3.2 被观察者 2.3 G…

文章目录

  • 一、观察者模式定义
  • 二、例子
    • 2.1 菜鸟教程例子
      • 2.1.1 定义观察者
      • 2.1.2 定义被观察对象
      • 2.1.3 使用
    • 2.2 JDK源码 —— Observable
      • 2.2.1 观察者接口Observer
      • 2.2.1 被观察者对象Observable
    • 2.3 Spring源码 —— AbstractApplicationContext
      • 2.3.1 观察者
      • 2.3.2 被观察者
    • 2.3 Guava源码 —— EventBus
  • 三、其他设计模式


一、观察者模式定义

类型:行为型模式
目的:当一个对象的状态发生改变时,其所有依赖者(观察者)都会收到通知并自动更新。


二、例子

2.1 菜鸟教程例子

2.1.1 定义观察者

//观察者
public abstract class Observer {//被观察对象protected Subject subject;public abstract void update();
}
public class BinaryObserver extends Observer{public BinaryObserver(Subject subject){this.subject = subject;this.subject.attach(this);}@Overridepublic void update() {System.out.println( "Binary String: " + Integer.toBinaryString( subject.getState() ) ); }
}
public class HexaObserver extends Observer{public HexaObserver(Subject subject){this.subject = subject;this.subject.attach(this);}@Overridepublic void update() {System.out.println( "Hex String: "  + Integer.toHexString( subject.getState() ).toUpperCase() ); }
}

2.1.2 定义被观察对象

import java.util.ArrayList;
import java.util.List;
//被观察对象 
public class Subject {//观察者列表private List<Observer> observers = new ArrayList<Observer>();private int state;public int getState() {return state;}public void attach(Observer observer){observers.add(observer);      }//通知所有观察者public void notifyAllObservers(){for (Observer observer : observers) {observer.update();}}  //修改数据时,通知所有观察者public void setState(int state) {this.state = state;notifyAllObservers();}
}

2.1.3 使用

public class ObserverPatternDemo {public static void main(String[] args) {//创建被观察对象Subject subject = new Subject();//创建观察者对象new HexaObserver(subject);new BinaryObserver(subject);//创建被观察对象调用setState时,通知国有观察者System.out.println("First state change: 15");   subject.setState(15);System.out.println("Second state change: 10");  subject.setState(10);}
}

2.2 JDK源码 —— Observable

2.2.1 观察者接口Observer

public interface Observer {void update(Observable o, Object arg);
}

2.2.1 被观察者对象Observable

public class Observable {private boolean changed = false;private Vector<Observer> obs;//添加观察者public synchronized void addObserver(Observer o) {if (o == null)throw new NullPointerException();if (!obs.contains(o)) {obs.addElement(o);}}//通知观察者public void notifyObservers(Object arg) {Object[] arrLocal;synchronized (this) {if (!changed)return;arrLocal = obs.toArray();clearChanged();}for (int i = arrLocal.length-1; i>=0; i--)((Observer)arrLocal[i]).update(this, arg);}
}

2.3 Spring源码 —— AbstractApplicationContext

2.3.1 观察者

public class ContextStartedEvent extends ApplicationContextEvent {public ContextStartedEvent(ApplicationContext source) {super(source);}
}
public class ContextStoppedEvent extends ApplicationContextEvent {public ContextStoppedEvent(ApplicationContext source) {super(source);}
}
public class ContextRefreshedEvent extends ApplicationContextEvent {public ContextRefreshedEvent(ApplicationContext source) {super(source);}
}

2.3.2 被观察者

public abstract class AbstractApplicationContext extends DefaultResourceLoader implements ConfigurableApplicationContext {//观察者集合private Set<ApplicationEvent> earlyApplicationEvents;//添加观察者Eventpublic void publishEvent(ApplicationEvent event) {this.publishEvent(event, (ResolvableType)null);}//通知观察者Eventprotected void registerListeners() {Iterator var1 = this.getApplicationListeners().iterator();while(var1.hasNext()) {ApplicationListener<?> listener = (ApplicationListener)var1.next();this.getApplicationEventMulticaster().addApplicationListener(listener);}String[] listenerBeanNames = this.getBeanNamesForType(ApplicationListener.class, true, false);String[] var7 = listenerBeanNames;int var3 = listenerBeanNames.length;for(int var4 = 0; var4 < var3; ++var4) {String listenerBeanName = var7[var4];this.getApplicationEventMulticaster().addApplicationListenerBean(listenerBeanName);}Set<ApplicationEvent> earlyEventsToProcess = this.earlyApplicationEvents;this.earlyApplicationEvents = null;if (!CollectionUtils.isEmpty(earlyEventsToProcess)) {Iterator var9 = earlyEventsToProcess.iterator();while(var9.hasNext()) {ApplicationEvent earlyEvent = (ApplicationEvent)var9.next();this.getApplicationEventMulticaster().multicastEvent(earlyEvent);}}}
}

2.3 Guava源码 —— EventBus

public class EventBus {//注册订阅者(观察者)public void register(Object object) {this.subscribers.register(object);}//通知订阅者(观察者)public void post(Object event) {Iterator<Subscriber> eventSubscribers = this.subscribers.getSubscribers(event);if (eventSubscribers.hasNext()) {this.dispatcher.dispatch(event, eventSubscribers);} else if (!(event instanceof DeadEvent)) {this.post(new DeadEvent(this, event));}}
}

三、其他设计模式

创建型模式
结构型模式

  • 1、设计模式——装饰器模式(Decorator Pattern)+ Spring相关源码

行为型模式

  • 1、设计模式——访问者模式(Visitor Pattern)+ Spring相关源码
  • 2、设计模式——中介者模式(Mediator Pattern)+ JDK相关源码
  • 3、设计模式——策略模式(Strategy Pattern)+ Spring相关源码
  • 4、设计模式——状态模式(State Pattern)
  • 5、设计模式——观察者模式(Observer Pattern)+ Spring相关源码
http://www.hkea.cn/news/436719/

相关文章:

  • 网站闭关保护怎么做广州百度seo 网站推广
  • 可以在线做动图的网站近期重大新闻事件
  • 伊犁州建设局网站怎么做微信小程序
  • 做网站需要买主机那新媒体营销方式有几种
  • 网络推广seo公司seo排名的方法
  • 南山做网站多少钱百度资讯
  • 西安哪里有做网站的小学生收集的新闻10条
  • 做游戏网站有几个要素seo网站关键词优化报价
  • 蓬业东莞网站建设技术支持东莞做网站公司首选
  • 网站版式设计获客渠道有哪些
  • 今日军事新闻简短扬州seo优化
  • 国外好看的教育类网站模板下载东莞做网站最好的是哪家
  • 微擎与wordpress快速优化seo软件推广方法
  • 英文网站设计哪家好免费网站搭建
  • 网站建设公司 销量深圳谷歌seo公司
  • 新蔡哪有做网站建设的全球疫情今天最新消息
  • 怎么做平台网站百度seo报价方法
  • 帮人做网站 怎么收费怎么用网络推广
  • 网站排名优化建设百度广告投放技巧
  • 文件服务器网站搭建教程好的竞价托管公司
  • 黑龙江省城乡和住房建设厅网站首页百度链接地址
  • 网站模板修改工具专业seo关键词优化
  • 口碑好的句容网站建设yahoo搜索
  • 深圳网站建设外贸公司价格网络营销的背景和意义
  • 长春网站建设硕成传媒seo快速排名优化公司
  • web网站开发能使用c 吗免费建立个人网站申请
  • 织梦网站修改教程视频网站优化培训学校
  • 南沙区交通和建设局网站中国十大网络销售公司
  • 免费建设网站的方法百度网址大全 官网
  • 手机网站设计制作公司微信推广费用一般多少