java订阅发布模式代码 实现一个简单的发布订阅模式
设计模式-快餐简解-【观察者模式】
【 观察者模式应用场景举例 】
创新互联是一家专注于成都网站设计、网站制作与策划设计,赵县网站建设哪家好?创新互联做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:赵县等地区。赵县做网站价格咨询:18980820575
比如在玩 极品飞车 这款游戏 每一个车手到达终点的时候 都会在其它车手的屏幕上显示 某某人以多少时间到达终点的提示 其实这就是一个典型的观察者模式的应用 观察者模式即是典型的双向一对多的应用场景下用一的一端来通知多的一端
【 观察者 模式解释】
类型 行为模式
定义了一种一对多的依赖关系 让多个观察者对象同时监听某一个主题对象 这个主题对象的状态发生改变时 会通知所有的观察者对象 使它们能够自己更新自己
【 观察者 模式UML图】
【 观察者 模式 JAVA代码实现】
新建抽象发布通知父类
package carer_subject;import java util ArrayList;import java util List;import carer_observer carer_observer;public interface carer_subject_parent { public void set_state(String state_string); public String get_state(); public void add_observer(carer_observer carer_observer_ref); public void sub_observer(carer_observer carer_observer_ref); public void notityAllCarer();}
新建发布通知实现类
package carer_subject;import java util ArrayList;import java util List;import carer_observer carer_observer;public class carer_subject_sub implements carer_subject_parent { Listcarer_observer list_observer = new ArrayListcarer_observer(); private String state; public void set_state(String state_string) { this state = state_string; } public String get_state() { return state; } public void add_observer(carer_observer carer_observer_ref) { list_observer add(carer_observer_ref); } public void sub_observer(carer_observer carer_observer_ref) { list_observer remove(carer_observer_ref); } public void notityAllCarer() { state = 到达终点 ; for (int i = ; i list_observer size(); i++) { list_observer get(i) show_info(); } }}
新建观察者接口
package carer_observer;import carer_subject carer_subject_parent;public interface carer_observer { public void show_info();}
新建观察者实现类
package carer_observer;import carer_subject carer_subject_parent;public class carer_observer_imple implements carer_observer { private carer_subject_parent carer_subject_parent_ref; public carer_subject_parent getCarer_subject_parent_ref() { return carer_subject_parent_ref; } public void setCarer_subject_parent_ref( carer_subject_parent carer_subject_parent_ref) { this carer_subject_parent_ref = carer_subject_parent_ref; } public carer_observer_imple(carer_subject_parent carer_subject_parent_ref) { super(); this carer_subject_parent_ref = carer_subject_parent_ref; } public void show_info() { System out println(carer_subject_parent_ref get_state()); }}
新建客户端运行类
package run_main;import carer_observer carer_observer_imple;import carer_subject carer_subject_parent;import carer_subject carer_subject_sub;public class run_main { public static void main(String[] args) { carer_subject_parent carer_subject_parent_ref = new carer_subject_sub(); carer_observer_imple carer_observer_imple_ref = new carer_observer_imple( carer_subject_parent_ref); carer_observer_imple carer_observer_imple_ref = new carer_observer_imple( carer_subject_parent_ref); carer_observer_imple carer_observer_imple_ref = new carer_observer_imple( carer_subject_parent_ref); carer_observer_imple carer_observer_imple_ref = new carer_observer_imple( carer_subject_parent_ref); carer_subject_parent_ref add_observer(carer_observer_imple_ref ); carer_subject_parent_ref add_observer(carer_observer_imple_ref ); carer_subject_parent_ref add_observer(carer_observer_imple_ref ); carer_subject_parent_ref add_observer(carer_observer_imple_ref ); carer_subject_parent_ref sub_observer(carer_observer_imple_ref ); carer_subject_parent_ref set_state( 到达终点 ); carer_subject_parent_ref notityAllCarer(); }}
程序运行结果如下
到达终点到达终点到达终点
以一对多的方式进行对一方状态的改变而去通知多方 观察者模式也叫发布/订阅模式 一方进行发布 而多方进行订阅 和生活中看报纸一样 你喜欢订城市晚报 就会发给你
【 观察者 模式 MyEclipse 项目JAVA代码实现】
lishixinzhi/Article/program/Java/gj/201311/27277
关于java
Java的Sun Microsystems的Java编程语言介绍了1995年5月(以下简称为Java语言)和Java平台的总称的。 HotJava浏览器(Java实现支持Java小程序)Java的魅力:跨平台,动态的Web,Internet计算。从那时起,Java被广泛接受和推广网络的快速发展,常用的浏览器现在支持Java applets。另一方面,Java技术是不断更新的。
Java平台的Java虚拟机(Java虚拟机)和Java应用程序编程接口(应用程序编程接口,或API)构成。独立的操作系统提供一个标准接口,可分为用于Java应用程序的Java应用程序编程接口的基本部分和扩展。 Java应用程序可以运行在Java平台上安装的硬件或操作系统平台。现在Java平台已经嵌入在几乎所有的操作系统。因此,Java程序可以只编译一次,并可以运行在不同的系统。 Java应用编程接口已经发展从1.1倍版本到1.2版本。 Java平台基于Java1.4,最近版本为Java1.7。
Java是分为三个系统JavaSE中(Java2平台标准版(32位x86)的Java平台,标准版),JavaEE服务器(Java 2平台企业版Java平台,企业版),和JavaME(Java 2平台Micro版平台的Java微型版)。
2009年的甲骨文(Oracle)宣布收购的太阳。
[编辑本段] JAVA的名字起源
一天,几个Java组的成员正在讨论如何命名这个新的语言,他们是爪哇(Java)的咖啡馆喝着咖啡,称为Java这项建议已得到别人的想法,Java名称的传播。没有去看看原来的Sun Java徽标认为,现在看,这不就是一杯热气腾腾的咖啡吗?
[编辑本段] Java语言特性
Java是一个简单的,面向对象的,分布式的,解释了安全,可靠的结构中立的,可移植的,高性能的多线程的动态语言。
当SUN的Java语言于1995年推出后,眼中的世界是神奇的语言吸引。 Java中到底有什么神奇的?
Java语言其实出生于1991年,最初称为OAK语言,SUN公司为一些消费性电子产品和通用设计环境。他们最初的目的只是为了开发一种独立于平台的软件技术,可以说是未知的,它几乎夭折,并在网络出现之前,OAK。然而,互联网的出现改变了OAK的命运。
的Java来临之前,在互联网上的信息内容都是一些无聊的刚性HTML文件。这是针对那些痴迷的WEB浏览器的人简直是无法忍受的。他们迫切希望看到的网络互动内容开发创建一个类,不需要考虑硬件和软件平台,可以执行应用程序的WEB是非常可取的,当然,这些程序也有一个很大的安全。对于用户来说,这样的要求,传统的编程语言是无能为力的。 SUN的工程师敏锐地认识到,从1994年起,他们开始OAK在WEB和HotJava的第一个版本所采用的技术。 SUN 1995年正式推出的Java的名义,几乎所有的Web开发人员心中感叹:哦,这正是我想要的!因此,Java已经成为一颗耀眼的明星,丑小鸭变成白天鹅的整个事情。
[编辑本段] Java的主要特点
Java语言是简单的。 Java语言的语法与C语言和C + +语言很接近大多数程序员很容易学习和使用Java。另一方面,Java已经丢弃了C + +中很少使用,这是很难理解的,令人困惑的功能,比如操作符重载,多继承,自动投。特别是,Java语言不使用指针,并提供了自动的废料收集,这样程序员就不必担心内存管理。
2,Java语言是一种面向对象的。 Java语言的类,接口和继承原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多重继承,并支持实施机制之间的类和接口(关键字实现)。 Java语言全面支持动态绑定,而C + +虚函数使用动态绑定。总之,Java语言是一种纯粹的面向对象编程语言。
3,Java语言是分布式的。 Java语言支持开发互联网应用,在基本的Java应用程序编程接口,它提供了网络应用编程的类库,包括URL,URL连接,套接字,ServerSocket的网络应用程序编程接口(java.net)。 Java的RMI(远程方法激活)机制是开发分布式应用程序的重要手段。
4,Java语言是健壮的。 Java的强类型,异常处理,自动垃圾收集的Java程序健壮性的重要保证。指针下降的Java明智的选择。 Java的安全检查机制使得Java更强的鲁棒性。
5,Java语言是安全的。 Java是经常被用来在网络环境中,Java提供了一个安全机制,以防止恶意代码的攻击。除了许多Java语言的安全功能,通过网络下载Java类的安全机制(类加载器)分配一个不同的名称空间,以防止其他本地类相同的名称,字节代码检查,并提供安全管理机制(类SecurityManager的)允许Java应用程序设置安全哨兵。
6,Java语言是体系结构中立的。 Java程序(后缀为java文件)被编译Java平台的体系结构中立的字节码格式的(类文件后缀),然后你就可以在Java平台上运行的任何系统。这种方法适用于异构的网络环境和软件分发。
7,Java语言是可移植的。这种可移植性体系结构中立此外,Java有严格的规定,每个基本数据类型的长度。 Java系统本身具有很强的可移植性,Java编译器是用Java实现的,Java的运行时环境中实现ANSI C.
8,Java语言的解释。正如前面提到的在Java平台上被编译成字节码格式,然后可以运行在任何系统中的Java平台,Java程序。在运行时,Java平台,Java解释器解释执行这些字节码类实施过程中需要加载到操作系统环境的耦合阶段。
9,Java是一种高性能。与解释型的脚本语言相比,Java是确实是一个高性能。事实上,Java的运行速度,搭配-IN-TIME(JIT)编译器技术的发展,越来越多的接近C + +。
10,Java语言是多线程的。线程是Java语言中的一种特殊的对象,它必须创建Thread类的子类(星期日)。通常有两种方法创建一个线程:首先,使用形式的几何结构,主题(可运行)构造函数将一个实现Runnable接口的对象包装成一个线程,第二子类派生从Thread类并重写run方法中,创建使用子类对象的线程。值得注意的是Thread类实现Runnable接口,因此,任何一个线程都有它的run方法,run方法包含的线程中运行的代码。的线程的活动来控制由一组方法。 Java语言支持同时执行多个线程之间的同步机制的多线程(关键字为synchronized)。
11,Java语言是动态的。 Java语言的设计目标之一的是,适于在环境中的动态变化。类的Java程序需要动态加载的经营环境,但也通过网络来加载所需的类。这也有利于软件的升级。此外,Java类的运行时类型检查的运行时表示。
Java语言的优秀功能,使Java应用程序具有无与伦比的耐用性和可靠性,这也降低了应用系统的维护成本。 Java嵌入式对象技术和Java平台API的支持可以缩短应用开发时间并降低成本。 Java编译,到处运行的特性使得它能够提供一个开放的架构可在任何地方,和低成本的方式来传递信息之间的多平台。特别是Java企业应用编程接口(Java企业API)为企业计算及电子商务应用提供相关的技术和丰富的类库。 [编辑本段] Java的相关技术
JDBC(Java数据库连接)提供了一个统一的接口来连接各种关系数据库,可提供统一的访问各种关系数据库,它由一组用JAVA语言编写的类和接口。 JDBC标准的API,JDBC为工具/数据库开发人员,你可以构建更高级的工具和接口,数据库开发人员用纯Java API来编写数据库应用程序,是一个商标名称。
2,EJB(企业JavaBeans)可以让开发人员能够轻松地创建,部署和管理跨平台的基于组件的企业应用程序。
3,用于开发分布式Java应用程序的Java的Java远程方法调用(RMI)。 Java对象,可以远程Java虚拟机调用。在这种方式中,远程方法激活可以发生在对等的两端,也可以发生在客户端和服务器之间,只要这两个应用程序都是用Java编写的。
4,Java的Java接口定义语言IDL()提供CORBA(公共对象请求代理体系结构)的无缝互操作性。这使得Java可以集成异构的业务信息资源。
5,JNDI(Java命名和目录接口)提供了一个统一的Java平台无缝连接。这个接口屏蔽了企业网络中使用的各种命名和目录服务。
6,JMAPI(Java管理API)提供了一套丰富的对象和方法的异构网络系统,网络和服务管理的发展。
7,JMS(Java消息服务),提供企业短信服务,如可靠的消息队列,发布和订阅通信,以及推 - 拉(推/拉)技术。
8,JTS(Java事务服务)提供开放的标准访问事务资源,包括事务处理应用程序,事务处理,管理和监测这些事务处理资源。
关注JavaBean,它是一个开放的标准的组件体系结构,它是独立于平台,但使用Java语言的Java技术,。一个JavaBean,以满足JavaBeans规范的Java类通常定义了一个现实世界的事物或概念。一个JavaBean属性,方法和事件的主要特点。通常情况下,在一个开发环境,支持JavaBeans规范(如Sun的Java Studio和IBM的VisualAge for Java)中,您可以直观地操作的JavaBean,也可以使用JavaBean构建一个新的JavaBean。 JavaBean的优势在于Java的可携性。现在,EJB(企业JavaBeans)的JavaBean概念扩展到Java服务器端组件体系结构,这个模型支持多层的分布式对象应用程序。除了到JavaBean,一个典型的组件体系结构DCOM和CORBA,在这些组件的体系结构的深入讨论超出了本书的范围。
Java的
计算机科学课程列表
JNI(Java本地接口)Java本机接口。
[编辑本段]
[Java开源J2EE框架Spring框架的Java开源项目]
Spring是一个解决方案,许多在J2EE开发功能强大的框架中的常见问题。 Spring提供了一个统一的管理业务对象的方法,并鼓励他们养成良好的生活习惯注入接口编程,而不是编程的类型。 Spring框架的基础是基于使用JavaBean属性控制反转容器。然而,这是完整的图片只是其中的一部分:Spring IoC容器作为一个完成的建筑关注所有架构层的完整解决方案是独一无二的。 Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大地提高了工作效率,并减少了出错的可能性。 Spring的数据访问架构还集成了Hibernate和其他O / R映射解决方案。 Spring还提供了一个唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。 Spring AOP框架提供了一个标准的Java语言,声明式事务管理和其它企业服务 - 如果你需要 - 还能实现自己的方面的POJO。这个框架足够强大,以使应用程序能够抛开EJB的复杂性,同时享受关键服务和传统EJB。 Spring还提供了集成和IoC容器强大而灵活的MVC Web框架。 [SpringIDE:Eclipse平台支持开发的一个插件。
WebWork的组件化和代码重用【Java开源的Web框架]开发
WebWork是由OpenSymphony组织专门拉出MVC模式J2EE Web框架。 WebWork的最新版本是2.1,现在WebWork2.x的前身,里卡德奥伯格开发的WebWork的WebWork的已经被分成两个项目Xwork1和webwork2的。 Xwork简洁,灵活功能强大,它是一个标准的Command模式,并且完全从web层脱离出来。 XWork之上提供了很多核心功能:前端拦截器(Interceptor)运行时表单属性验证,类型转换,强大的表达式语言(OGNL - 对象图形标记语言)的IoC(控制反转控制反转)容器。在建立XWork的顶部webwork2的处理HTTP的响应和请求。 webwork2的使用的ServletDispatcher HTTP请求转化为行动(业务层Action类)的映射会话(session)的应用范围(应用程序),请求的请求参数映射。 webwork2的支持多视图的视图部分可以使用JSP,速度,FreeMarker的的,JasperReports,XML。在WebWork2.2增加了对AJAX的支持,这种支持是建立的基础上的DWR与Dojo框架【EclipseWork:用于WebWork的一个Eclipse插件,帮助开发人员
的Struts【Java开源的Web框架]
Struts是一个基于J2EE平台的MVC框架,主要是采用Servlet和JSP技术。 Struts应用程序开发人员可以完全满足需求,易于使用,灵活快速乱舞在过去的一年。 Struts的的Servlet,JSP,自定义标签和信息资源(信息资源)整合到一个统一的框架,开发人员可以使用它的发展不再需要自己编码实现全套MVC模式,极大的节约的时间,让是Struts是一个非常不错的应用框架。 StrutsIDE:对Struts协助开发一个Eclipse插件]
休眠[开放源码的Java持久化框架]
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行非常轻量级的对象编程思维对象的封装性,使任意的Java程序员可以使用它来操纵数据库的。 Hibernate可以应用任何场合使用JDBC,无论是客户端程序在Java实用程序也可以使用一个Servlet / JSP的Web应用程序中,最具革命性的,Hibernate可以取代CMP EJB的J2EE架构的应用程序来完成数据持久化的重要任务。 Hibernate在Eclipse平台的辅助开发工具:【使用Hibernate Synchronizer】【MiddlegenIDE
石英[Java的开源作业调度】
Quartz是OpenSymphony的开源组织在该领域的工作安排的一个开源项目,它可以与J2EE,J2SE应用程序相结合也可以单独使用。 Quartz可以用来创建简单或运行十,百,甚至是数以十万计的就业机会,每天的日程是如此复杂。 Jobs可以做成标准的Java组件或EJBs。石英石英1.5.0的最新版本。
速度【Java开源模板引擎
Velocity是一个基于java的模板引擎(模板引擎)。它允许任何人仅仅简单的使用模板语言模板语言来引用由java代码定义的对象。速度应用于web开发时,界面设计和java程序开发人员同步开发遵循MVC架构的网站,也就是说,页面设计人员可以专注于显示的页面,java程序开发人员关注业务逻辑编码。速度java代码从网页中分离出来,便于长期维护的网站,同时也为我们在JSP和PHP提供了另一种解决方案。 Velocity的能力远超过网络网站的发展在这方面,例如,它可以产生SQL和PostScript的,XML模板(模板),它也可以被用来作为一个独立的工具,以产生源代码和报告,或者作为其他系统的集成组零件。速度还提供了模板服务的汽轮机的web开发框架(模板服务)。速度+涡轮机提供一个模板服务,允许Web应用程序开发一个真正的MVC模型。 【VeloEclipse:发展速度的辅助插件Eclipse平台]
IBATIS [开放源码的Java持久化框架
使用的iBatis提供的ORM机制,在人事方面,实现了业务逻辑,面对纯Java对象,这一层通过Hibernate ORM而言基本相同的具体的数据操作,Hibernate会自动生成SQL语句,ibatis的要求开发者编写具体的SQL语句。相对Hibernate的“全自动”ORM机制,ibatis的SQL开发的工作量和数据库移植性上的让步,系统设计提供了更大的自由空间。实现的有益补充,作为“全自动”ORM ibatis的外观显得特别有意义。
Compiere的ERP&CRM【Java开源的ERP和CRM系统
Compiere的ERP&CRM提供全面的解决方案,为全球小型和中小型企业,涵盖所有领域,从客户管理,供应链,财务,管理,支持多组织,多币种,多会计模式,多成本,多语种,多税收国际化的特征。易于安装,易于实施,易于使用。只需要几个小时,你可以用采购 - 采购 - 发票 - 付款报价 - 订单 - 发票 - 收款,产品定价,资产管理,客户关系,供应商关系,员工关系,的运作分析功能强大的结果。
滚子Weblogger【Java开源Blog博客]
网络博客更复杂的设计,源代码是一个很好的学习材料。它应该支持网络博客的功能,如:评论功能,所见即所得的HTML编辑器,引用,提供了页面模板,RSS聚合的blogroll,管理,并提供了一个XML-RPC接口。
Eclipse的Java的开放源代码开发工具]
Eclipse平台的开发框架,IBM捐赠给开放源代码社区,不是因为它是著名的IBM声称-4千万美元投资的发展,总数的资金,但如此巨大的投资,因为结果:一个成熟的,精心设计的,可扩展的体系结构。
的NetBeans【Java开源开发工具]
NetBeans IDE是一个软件开发提供了免费,开源的集成开发环境。你可以得到所有的工具,你需要使用Java,C / C + +甚至是Ruby来创建专业的桌面应用程序,企业应用程序,web和移动应用程序。 IDE可以在多种平台上运行,包括Windows,Linux和Mac OS X中,和Solaris,这是非常易于安装和易于使用的。
XPlanner【Java开源的项目管理
XPlanner一个基于Web的XP团队计划和跟踪工具。 XP独特的开发概念,如迭代,用户故事,,XPlanner提供了相应的管理工具,XPlanner支持XP开发流程,并解决遇到的问题的使用XP想法的开发项目。 XPlanner特点包括:简单的模型规划,虚拟笔记卡(虚拟笔记卡)迭代的用户故事和工作记录的追踪,未完成的故事会自动迭代,工作时间追踪,生成团队效率,个人考勤表,SOAP界面支持。
HSQLDB【Java开源DBMS数据库
HSQLDB(高超声速SQL)是一个纯Java的关系数据库的开发,并提供了一个JDBC驱动程序来访问数据。支持ANSI-92标准SQL语法。而且他占的空间小。大约只有160K,快速的数据库引擎。
Liferay的【Java的开源门户和
代表一个完整的J2EE应用程序,使用Web,EJB以及JMS等技术,特别是在前面部分使用Struts框架技术的接口,XML-基于portlet配置文件可以自由动态扩展,使用Web服务来支持一些远程访问的信息,Apahce Lucene的全文搜索功能。
Jetspeed的?【Java开源的门户门户]
Jetspeed是一个开放源代码的企业信息门户(EIP)的实现,使用的技术是Java和XML。信息门户的用户可以使用浏览器,支持WAP协议的手机或其他设备访问Jetspeed的架设。 Jetspeed的所扮演的角色的信息集中器,它可以把信息一起,很容易地提供给用户。
的JOnAS【Java开源的J2EE服务器]
的JOnAS是一个开放源代码的J2EE实现的ObjectWeb协会开发。集成Tomcat或Jetty成为它的Web容器,以确保符合Servlet 2.3和JSP 1.2规范。 JOnAS服务器的依赖,实现以下的Java API:JCA,JDBC,JTA,JMS,JMX,JNDI,JAAS,JavaMail的。
JFox3.0【Java开源的J2EE服务器使用
JFox是一个开源的Java EE应用服务器,致力于提供一个轻量级的Java EE应用服务器,从3.0开始,JFox提供了一个支持模块化MVC框架,以简化EJB和Web应用程序的开发!如果您正在寻找一个简单,重量轻,高效,全面的Java EE开发平台,JFox正是你需要的。
[编辑本段] Java的IDE
当今最流行的Eclipse,Myeclipse中,Jbuilder2008,Jdeveloper的,Netbeans的。 [编辑本段] Java“一书
Java编程思想(第4版)
:(美)埃克尔,陈薅怦翻译
JAVA编程思想(第四版)出版社:机械工业出版社
出版日期:2007-6-1词:版次:1页数:880印刷时间:2007/06/01开本:印象:纸张:胶版纸ISBN:9,787,111,213,826包装:平装
关于作者
Bruce Eckel的是MindView公司的总裁,该公司提供的软件,其客户的咨询和培训。他的C + +标准委员会的投票成员之一,拥有应用物理学学士和计算机工程硕士学位。除了这本书外,他是一个“C + +编程思想”的人合作撰写的“C + +编程思想,第2卷”(两本书的英文影印版和中国版引入了由机械工业出版社出版)及其他著作。他已发表了150多篇论文,还经常参加世界各地的研讨会并发表演讲。
[编辑本段] Java版本历史
Java语言诞生于1995年,
日,1996年,第一个JDK-JDK1.0出生的
1996年4月,10个最重要的操作系统供应商确认其产品中嵌入JAVA技术
1996年9月,约83,000 Web应用程序的JAVA技术,使
1997年2月18日一天,JDK1.1版本
1997年的JavaOne大会,参与者超过百万人,创下了类似的全球规模的会议记录
1997年,JavaDeveloperConnection社区成员超过10万
1998年,JDK1.1被下载超过200万次
在1998年,JAVA2企业平台发布
1999年,Sun发布了Java J2EE三个版本:标准版(J2SE),企业版(J2EE)和微型版(J2ME)
2000年5月8日,JDK1.3发布 / 2000年5月29日,JDK1.4 2001年,诺基亚公司宣布,2003年将销售100万的Java功能的手机
2月2001年9月24日,2010年,J2EE1.3
2002年, 26日,J2SE1.4,因为Java的计算能力已显着增加
9月30日,2004 18:00 PM,J2SE1.5发布,成为Java语言的发展历史的又一个里程碑。要显示版本的重要性,J2SE1.5更名为Java SE 5.0的
2005年JavaOne大会上,Sun公司公开Java SE 6中。在这一点上,各种版本的Java已经被重新命名为取消一个数字“2”:J2EE更名为Java EE,J2SE更名为更名为Java SE,J2ME的Java ME
2006年12月,Sun发布了JRE6目前JDK7.0 0.0
在研究和开发,有测试版的的 。 dev.java.net / 可下载
[编辑本段] Java的互联网
我们知道,以前的WWW不仅可以发送文字和图片,Java的交互式页的的出现是一个伟大的革命。
的Java,设计不是互联网,万维网,它也可以被用来编写独立的应用程序。 Java是一种面向对象的语言,Java语言是C + +语言,所以我们必须掌握C + +编程语言,再学习Java语言是很容易的! Java程序需要编译,它被放置在互联网服务器上,当用户对服务器的访问,Java程序被下载到本地用户的机器,解释的浏览器中运行。实际上有两种Java程序的Java应用程序是一个完整的程序,如Web浏览器。另一个Java应用程序运行在一个Web浏览器程序。
Java程序其浏览器Hotjava中,提供了一种方法,可以让你的浏览器中运行的程序。您可以直接从您的浏览器来播放声音,你可以播放动画,Java的也可以告诉你如何处理与一个新的类型的文件浏览器的页面。当我们能够在2400波特线来传输视频图像,Hotjava中能够显示视频。
[编辑本段] Java和电子商务
,电子商务是当今的一个热门话题,传统的编程语言,但是,不能做电子商务系统,电子商务程序代码的基本要求:安全,可靠,做生意的世界各地,在不同的平台上运行的客户机的要求。 Java的强大的安全性,平台无关的,独立的硬件结构,用简单的语言,面向对象,并在网络编程语言中占据无可比拟的优势,成为电子商务系统的首选语言。
[编辑本段] Java的8个基本数据类型和它们的包装类
int基本数据类型的包装类的原始类型的份额
短短2个字节的整数中的字节数4个字节
长8个字节
浮子的4个字节
双人大床8个字节
字节字节1个字节
CHAR字符2个字节
布尔布尔测试编译环境
[编辑本段]第一个JAVA程序的HelloWorld
/ /文件名的HelloWorld.java
/ /声明公共类一类
的HelloWorld { / /声明一个方法
公共静态无效的主要(字串[] args){/ /程序入口
/ /输出
(“世界你好!); BR /}
}
/ /例子
包的文本;
类测试(
公共静态无效的主要(字串[] args){...... /短D = 12,/ /短整型的
System.out.println(D); / / D
长,C = 144L; / /长整数添加L
系统通过out.println(C)/ /输出
诠释Z = 15; / /整数
System.out.println(Z)/ /输出
字符E ='I “/ /字符”
System.out.println(五);/ /输出è
}
)
[编辑本段] Java新手入门是非常重要的一个一些基本的概念
[1] [2] [3]最后一类:为防止他人从你的类派生出新的类,它是不可扩展的。
动态调用比静态调用花费的时间要长。
抽象类:规定一个或多个抽象方法的类本身必须定义为abstract。
案件:公共抽象的字符串getDescripition
Java的每一个类都是从Object类扩展。和
平等和对象类的toString方法。
等于用于测试一个对象是否与另一个对象是相等的。
的toString返回一个字符串,几乎每一个类的对象将覆盖此方法,以便返回当前状态的正确表示。
(toString方法是一个很重要的方法)
泛型编程:所有的值?任何类型可以是同一对象类的变量,而不是。
数组列表:ArrayList的动态数组列表,是一个类库,定义在java.uitl包可自动调节数组的大小。
类的类对象类的getClass方法返回一个类型的实例的类,它包含的主要方法的类会被加载在程序启动时,虚拟机是所有他需要的类,每一个加载的类加载必须加载它需要的类。
java中什么叫"观察者设计模式"?
观察者模式(Observer Pattern),又被称为发布/订阅模式,它是软体设计模式中的一种。观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
在观察者模式中,一个目标物件(被观察者)管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知,这通常通过呼叫各观察者所提供的方法来实现。此种模式通常被用来实作事件处理系统。观察者模式有很多实现方式,从根本上说,该模式必须包含两个角色:观察者和被观察者。观察者和被观察对象之间的互动关系不能体现成类之间的直接调用,那样就将使观察者和被观察对象之间紧密的耦合起来,从根本上违反面向对象的设计的原则。在具体的实现中,我们需要面向接口编程,让被观察者管理观察者对象接口类型,然后调用接口方法更新观察者。
详细内容请参考《软件秘笈:设计模式那点事》,祝你早日学会设计模式!
java中的单例模式的代码怎么写
我从我的博客里把我的文章粘贴过来吧,对于单例模式模式应该有比较清楚的解释:
单例模式在我们日常的项目中十分常见,当我们在项目中需要一个这样的一个对象,这个对象在内存中只能有一个实例,这时我们就需要用到单例。
一般说来,单例模式通常有以下几种:
1.饥汉式单例
public class Singleton {
private Singleton(){};
private static Singleton instance = new Singleton();
public static Singleton getInstance(){
return instance;
}
}
这是最简单的单例,这种单例最常见,也很可靠!它有个唯一的缺点就是无法完成延迟加载——即当系统还没有用到此单例时,单例就会被加载到内存中。
在这里我们可以做个这样的测试:
将上述代码修改为:
public class Singleton {
private Singleton(){
System.out.println("createSingleton");
};
private static Singleton instance = new Singleton();
public static Singleton getInstance(){
return instance;
}
public static void testSingleton(){
System.out.println("CreateString");
}
}
而我们在另外一个测试类中对它进行测试(本例所有测试都通过Junit进行测试)
public class TestSingleton {
@Test
public void test(){
Singleton.testSingleton();
}
}
输出结果:
createSingleton
CreateString
我们可以注意到,在这个单例中,即使我们没有使用单例类,它还是被创建出来了,这当然是我们所不愿意看到的,所以也就有了以下一种单例。
2.懒汉式单例
public class Singleton1 {
private Singleton1(){
System.out.println("createSingleton");
}
private static Singleton1 instance = null;
public static synchronized Singleton1 getInstance(){
return instance==null?new Singleton1():instance;
}
public static void testSingleton(){
System.out.println("CreateString");
}
}
上面的单例获取实例时,是需要加上同步的,如果不加上同步,在多线程的环境中,当线程1完成新建单例操作,而在完成赋值操作之前,线程2就可能判
断instance为空,此时,线程2也将启动新建单例的操作,那么多个就出现了多个实例被新建,也就违反了我们使用单例模式的初衷了。
我们在这里也通过一个测试类,对它进行测试,最后面输出是
CreateString
可以看出,在未使用到单例类时,单例类并不会加载到内存中,只有我们需要使用到他的时候,才会进行实例化。
这种单例解决了单例的延迟加载,但是由于引入了同步的关键字,因此在多线程的环境下,所需的消耗的时间要远远大于第一种单例。我们可以通过一段测试代码来说明这个问题。
public class TestSingleton {
@Test
public void test(){
long beginTime1 = System.currentTimeMillis();
for(int i=0;i100000;i++){
Singleton.getInstance();
}
System.out.println("单例1花费时间:"+(System.currentTimeMillis()-beginTime1));
long beginTime2 = System.currentTimeMillis();
for(int i=0;i100000;i++){
Singleton1.getInstance();
}
System.out.println("单例2花费时间:"+(System.currentTimeMillis()-beginTime2));
}
}
最后输出的是:
单例1花费时间:0
单例2花费时间:10
可以看到,使用第一种单例耗时0ms,第二种单例耗时10ms,性能上存在明显的差异。为了使用延迟加载的功能,而导致单例的性能上存在明显差异,
是不是会得不偿失呢?是否可以找到一种更好的解决的办法呢?既可以解决延迟加载,又不至于性能损耗过多,所以,也就有了第三种单例:
3.内部类托管单例
public class Singleton2 {
private Singleton2(){}
private static class SingletonHolder{
private static Singleton2 instance=new Singleton2();
}
private static Singleton2 getInstance(){
return SingletonHolder.instance;
}
}
在这个单例中,我们通过静态内部类来托管单例,当这个单例被加载时,不会初始化单例类,只有当getInstance方法被调用的时候,才会去加载
SingletonHolder,从而才会去初始化instance。并且,单例的加载是在内部类的加载的时候完成的,所以天生对线程友好,而且也不需要
synchnoized关键字,可以说是兼具了以上的两个优点。
4.总结
一般来说,上述的单例已经基本可以保证在一个系统中只会存在一个实例了,但是,仍然可能会有其他的情况,导致系统生成多个单例,请看以下情况:
public class Singleton3 implements Serializable{
private Singleton3(){}
private static class SingletonHolder{
private static Singleton3 instance = new Singleton3();
}
public static Singleton3 getInstance(){
return SingletonHolder.instance;
}
}
通过一段代码来测试:
@Test
public void test() throws Exception{
Singleton3 s1 = null;
Singleton3 s2 = Singleton3.getInstance();
//1.将实例串行话到文件
FileOutputStream fos = new FileOutputStream("singleton.txt");
ObjectOutputStream oos =new ObjectOutputStream(fos);
oos.writeObject(s2);
oos.flush();
oos.close();
//2.从文件中读取出单例
FileInputStream fis = new FileInputStream("singleton.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
s1 = (Singleton3) ois.readObject();
if(s1==s2){
System.out.println("同一个实例");
}else{
System.out.println("不是同一个实例");
}
}
输出:
不是同一个实例
可以看到当我们把单例反序列化后,生成了多个不同的单例类,此时,我们必须在原来的代码中加入readResolve()函数,来阻止它生成新的单例
public class Singleton3 implements Serializable{
private Singleton3(){}
private static class SingletonHolder{
private static Singleton3 instance = new Singleton3();
}
public static Singleton3 getInstance(){
return SingletonHolder.instance;
}
//阻止生成新的实例
public Object readResolve(){
return SingletonHolder.instance;
}
}
再次测试时,就可以发现他们生成的是同一个实例了。
java mqtt
java mqtt是什么,让我们一起了解一下?
MQTT是一个基于客户端-服务器的消息发布或订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,如果工作在TCP或IP协议上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布或订阅型的消息协议。
MQTT主要应用在哪些场合?
1、它是一种机器之间通讯 machine-to-machine (M2M)、物联网 Internet of Things (IoT)常用的一种轻量级消息传输协议。
2、适用于网络带宽较低的场合。
3、包含发布、订阅模式,通过一个代理服务器(broker),任何一个客户端(client)都可以订阅或者发布某个主题的消息,然后订阅了该主题的客户端则会收到该消息。
实战操作:模拟客户端接收消息。 import java.util.concurrent.ScheduledExecutorService; import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.eclipse.paho.client.mqttv3.MqttTopic; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; /** * 模拟一个客户端接收消息 * * @author Unclue_liu */ public class ClientMQTT { public static final String HOST = "tcp://192.168.1.77:1883"; public static final String TOPIC1 = "pos_message_all"; private static final String clientid = "12345678"; private MqttClient client; private MqttConnectOptions options; private String userName = "mqtt"; //非必须 private String passWord = "mqtt"; //非必须 private ScheduledExecutorService scheduler; private void start() { try { // host为主机名,clientid即连接MQTT的客户端ID,一般以唯一标识符表示,MemoryPersistence设置clientid的保存形式,默认为以内存保存 client = new MqttClient(HOST, clientid, new MemoryPersistence()); // MQTT的连接设置 options = new MqttConnectOptions(); // 设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,设置为true表示每次连接到服务器都以新的身份连接 options.setCleanSession(false); // 设置连接的用户名 options.setUserName(userName); // 设置连接的密码 options.setPassword(passWord.toCharArray()); // 设置超时时间 单位为秒 options.setConnectionTimeout(10); // 设置会话心跳时间 单位为秒 服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线,但这个方法并没有重连的机制 options.setKeepAliveInterval(20); //设置断开后重新连接 options.setAutomaticReconnect(true); // 设置回调 client.setCallback(new PushCallback()); MqttTopic topic = client.getTopic(TOPIC1); //setWill方法,如果项目中需要知道客户端是否掉线可以调用该方法。设置最终端口的通知消息 //遗嘱 options.setWill(topic, "close".getBytes(), 1, true); client.connect(options); //订阅消息 int[] Qos = {1};//0:最多一次 、1:最少一次 、2:只有一次 String[] topic1 = {TOPIC1}; client.subscribe(topic1, Qos); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { ClientMQTT client = new ClientMQTT(); client.start(); }
文章名称:java订阅发布模式代码 实现一个简单的发布订阅模式
文章位置:http://hbruida.cn/article/hjdcse.html