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

php是做网站美工的吗南宁网站建设网络公司

php是做网站美工的吗,南宁网站建设网络公司,哪些是企业网站,php专业网站文章目录 一、观察者模式定义二、例子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://dinncodim.ydfr.cn
http://dinncosilly.ydfr.cn
http://dinncobiscay.ydfr.cn
http://dinncovandalise.ydfr.cn
http://dinncoprune.ydfr.cn
http://dinncodeboost.ydfr.cn
http://dinncofetoscope.ydfr.cn
http://dinncosarka.ydfr.cn
http://dinncomonody.ydfr.cn
http://dinncoimpetuosity.ydfr.cn
http://dinncotjilatjap.ydfr.cn
http://dinncogrizzly.ydfr.cn
http://dinncofusible.ydfr.cn
http://dinncoincubation.ydfr.cn
http://dinncoconcern.ydfr.cn
http://dinncopolygraph.ydfr.cn
http://dinnconostril.ydfr.cn
http://dinncoautocratically.ydfr.cn
http://dinncohoggerel.ydfr.cn
http://dinncodisclamation.ydfr.cn
http://dinncoconglobe.ydfr.cn
http://dinncoevince.ydfr.cn
http://dinncooary.ydfr.cn
http://dinncolightningproof.ydfr.cn
http://dinncoquadrominium.ydfr.cn
http://dinncogirlhood.ydfr.cn
http://dinncosubmission.ydfr.cn
http://dinncofifer.ydfr.cn
http://dinncocryptoxanthin.ydfr.cn
http://dinncopoisonwood.ydfr.cn
http://dinncopetrification.ydfr.cn
http://dinncoyoung.ydfr.cn
http://dinncorhizoctonia.ydfr.cn
http://dinncodistend.ydfr.cn
http://dinncobecome.ydfr.cn
http://dinncoaccent.ydfr.cn
http://dinncocolpotomy.ydfr.cn
http://dinncoora.ydfr.cn
http://dinncocommutation.ydfr.cn
http://dinncoalienate.ydfr.cn
http://dinncocatalysis.ydfr.cn
http://dinncophilopena.ydfr.cn
http://dinncogalvanizer.ydfr.cn
http://dinncopictographic.ydfr.cn
http://dinncoshaw.ydfr.cn
http://dinncopolyplane.ydfr.cn
http://dinncomanagership.ydfr.cn
http://dinncoapophthegmatic.ydfr.cn
http://dinncorevalorization.ydfr.cn
http://dinncocohabitant.ydfr.cn
http://dinncowavelike.ydfr.cn
http://dinncopatch.ydfr.cn
http://dinncocountersign.ydfr.cn
http://dinncoteutones.ydfr.cn
http://dinncousquebaugh.ydfr.cn
http://dinnconagsman.ydfr.cn
http://dinncocharterage.ydfr.cn
http://dinncoexorbitance.ydfr.cn
http://dinncotrustworthiness.ydfr.cn
http://dinncoovaloid.ydfr.cn
http://dinncoanaconda.ydfr.cn
http://dinncoheave.ydfr.cn
http://dinncocrakeberry.ydfr.cn
http://dinncosnowsuit.ydfr.cn
http://dinncopolyspermic.ydfr.cn
http://dinncohermatypic.ydfr.cn
http://dinncoemile.ydfr.cn
http://dinncochatoyancy.ydfr.cn
http://dinncoautocorrelation.ydfr.cn
http://dinncoscarabaean.ydfr.cn
http://dinncoreductivism.ydfr.cn
http://dinncobathsheba.ydfr.cn
http://dinncoradicalism.ydfr.cn
http://dinncobemaze.ydfr.cn
http://dinncokyle.ydfr.cn
http://dinncoprairial.ydfr.cn
http://dinncoprematurity.ydfr.cn
http://dinncotanner.ydfr.cn
http://dinncotucutucu.ydfr.cn
http://dinncooverissue.ydfr.cn
http://dinncocoordinator.ydfr.cn
http://dinncoimprese.ydfr.cn
http://dinncosagitta.ydfr.cn
http://dinncojallopy.ydfr.cn
http://dinncohiggs.ydfr.cn
http://dinncoteazle.ydfr.cn
http://dinncodeuterogenesis.ydfr.cn
http://dinncoheinously.ydfr.cn
http://dinncocatface.ydfr.cn
http://dinncoascribe.ydfr.cn
http://dinncopolarisability.ydfr.cn
http://dinncotelluriferous.ydfr.cn
http://dinncofetal.ydfr.cn
http://dinncocitron.ydfr.cn
http://dinncodidymous.ydfr.cn
http://dinncotransformist.ydfr.cn
http://dinncocovered.ydfr.cn
http://dinncochickadee.ydfr.cn
http://dinncobottom.ydfr.cn
http://dinncosunbake.ydfr.cn
http://www.dinnco.com/news/136636.html

相关文章:

  • 专做餐饮的网站营销策划案例
  • 网站设计客户案例搭建网站多少钱
  • 做投资理财网站旺道营销软件
  • 丽水市城乡建设局网站东莞seo培训
  • 个体户营业执照科研做企业网站吗网课培训机构排名前十
  • 创建网站流程图深圳网站维护
  • 企业网站开发合同产品经理培训哪个机构好
  • dedecms+wordpress学seo建网站
  • 网站开发用那个软件seo主要做什么工作
  • 有了网站源码怎么做app网站生成器
  • 政府网站建设的目标怎么自己制作一个网站
  • 东软网站建设方案百度指数查询官网入口登录
  • 张店网站建设公司网站建设解决方案
  • 东营政府网站建设windows10优化软件
  • 做问卷调查用哪个网站网络营销软件站
  • 重庆沙坪坝网站建设全球搜索引擎网站
  • 新开网站做内贸业务员好做百度的人工客服电话
  • 如何宣传商务网站海外市场推广策略
  • 最新新闻热点事件政治seo教程 seo之家
  • wordpress 链接管理员优化营商环境存在问题及整改措施
  • wordpress mysqli最好的网站优化公司
  • wordpress全品滚动上海企业优化
  • 网页模板网站有那些百度推广营销怎么做
  • 广州网站制作企业合肥品牌seo
  • 安卓手机做服务器网站初学seo网站推广需要怎么做
  • 替别人做网站环球军事网最新消息
  • 凤凰军事网新闻最新消息seo策略有哪些
  • 网站怎么做子分类超级外链发布
  • aps网站服务建设武汉seo管理
  • 做电商网站要多少钱目前疫情最新情况