动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.“老虎”来了 J2SE1.5新功能一览.
.用mod_security保障Web Services.
.SCJP认证套题解析之十二.
.JDBC专题介绍.
.java设计模式之State(对应每种状.
.Log信息获取调用类和调用方法名的.
.EJB核心技术及其应用.
.Spring入门书籍.
.Java中的两个特殊变量this和super.
.java类型转换与强制类型转换.
.关于GUI界面的布局与建立.
.多线程.
.如何使用Java中的Date和Calendar.
.理解并解决IE的内存泄漏方式.
.如何使用Java编写多线程程序.
.Java开发工具Jcreator使用技巧总.
.经常会用得上的jar命令列表清单.
.Java核心代码例程之:(JAXP) SAX.
.Java中的语句、分支和路径覆盖测.
.获得消息:J2EE 1.4 中的消息.

爪哇语言单态创立性模式介绍(上)

发表日期:2008-1-5 |



  什么是模式
  一个围棋下得好的人知道,好的"形"对于围棋非常重要。形是棋子在棋盘上的几何外形的抽象化。 形就是模式(Pattern),也是人脑把握和熟悉外界的要害。而人脑对处理模式的能力也非常高超, 人可以在几百张面孔中一下子辨认出所熟悉的脸来,就是一个例子。
  简而言之,在我们处理大量问题时,在很多不同的问题中重复出现的一种性质,它使得我们可以使用一种方法来描述问题实质并用本质上相同,但细节永不会重复的方法去解决,这种性质就叫模式。模式化过程是把问 题抽象化,在忽略掉不重要的细节后,发现问题的一般性本值,并找到普遍使用的方法去解决的过程。
  发现模式是与研究模式同时发生的,发现一个新的模式很不轻易。一个好的模式必须满足以下几点:
  1、它可以解决问题。模式不能仅仅反映问题,而必须对问题提出解决方案。
  2、它所提出解决方案是正确的,而且不是很明显的。
  3、它必须是涉及软件系统深层的结构的东西,不能仅是对已有的模块的描述。
  4、它必须满足人的审美,简洁美观。
  换言之,一个美妙的东西不一定就是模式,但是一个模式必须是一个美妙的东西。
  软件工程学的各个方面,诸如开发组织,软件处理,项目配置治理,等等,都可以看到模式的影子。但至今 得到了最好的研究的是设计模式和组织模式。在软件编程中使用模式化方法, 是在编程对象化之后才开始得到重视的。软件编程中模式化方法的研究,也是在九十年代才开始。
  在面向对象的编程中使用模式化方法研究的开创性著作,是
  Design Patterns - Elements of Reusable Object-Oriented Software, E.Gamma, R. Helm, R. Johnson, and J. Vlissides,1995, Addison-Wesley.
  这四位作者通常被称为四人帮(Gang of Four, 或GoF)。(在这个词出现以后,很多西方商业炒作利用这个 路人皆知的词赚钱,有一个八十年代的美国四人乐队以此为队名。在英国政界更曾有好几个小帮派被称为四人帮。 在这里大家使用这个词称呼这四个闻名作者,带有戏虐成分。)
  由于爪哇语言的特点,使得模式在爪哇语言的实现有自己的特点。 爪哇语言是现今最普及的纯粹OOP的编程语言,使用爪哇语言编程的程序师平均的素质也相对比较高。 这些程序师往往不满足于只是实现程序功能要求,他们经常想要在代码结构,编程风格,乃至解决问题的 思考方式上不断进取和自我完善。模式,就是在大量的实践中总结和理论化之后的优选的代码结构,编程风格, 及解决问题的思考方式。对模式的了解和把握,是爪哇程序师提高自身素质的一个很好的方向。
  作者在学习和工作中把自己的体会 总结下来,藉以与读者交流提高。
  作者在后面会使用简单的UML(统一建模语言,Unified Modelling Languge)。由于市场上有很多介绍UML 的书,而作者在后面使用到的UML又极为简单,因此只在此作一极为简单的介绍,目的是让没有接触过UML的 读者能看懂后面的讲述。
   爪哇语言单态创立性模式介绍(上)(图一)
  图1. UML的类图举例 
  在图1的类图中可以看出,表示类的框分成四层:类名,变量清单,函数清单和属性清单。 变量名如是正体字,表明类是实的(Concrete,即可以实例化的类),变量名如是斜体字,表明类是抽象的。 显然,我们在图中给出了一个实的类。
  在图1的类ClassUML中,一个变量或函数(方法)左面假如有一个加(+)号,表示它是公开的, 左面假如有一个减(-)号,表示它是私有的,左面假如有一个井(#)号,表示它是保护的。
  一个属性即由一个内部变量,一个赋值函数(mutator)和一个取值函数(Accessor)组成的结构。
  在类的方框的右上角里,通常还分两行写出类的父类和所实现的接口。在后面读者会看到例子。
  在类与类之间,会有线条指明它们之间的关系。在类与类之间可以发生推广(与继续相反),依靠,累积和关联 等关系。在后面读者看到例子时作者会加以解释。
  package com.Javapatterns.singleton.demos;
  public class ClassUML {
   public ClassUML() {}
   private void aPrivateFunction() {}
  public void aPublicMethod() {}
   public int getAProperty(){ return aPrivateVar; }
   public void setAProperty(int aPrivateVar)
  { this.aPrivateVar = aPrivateVar;  }
   static public void aStaticMethod() {}
   protected void aProtectedMethod() {}
   private int aPrivateVar;
   public int aPublicVar;
   protected int aProtectedVar;
  }
  代码清单1. ClassUML类的源代码。
  什么是创立性模式
  创立性模式(Creational Patterns)是类在实例化时使用的模式。当一些系统在创立对象时,需要动态地决定 怎样创立对象,创立哪些对象。创立性模式告诉我们怎样构造和包装这些动态的决定。创立性模式通常包括 以下的模式
  1、工厂函数模式
  2、抽象工厂类模式
  3、建设者模式
  4、原始模型模式
  5、单态模式
  单态模式
  一个单态类只可有一个实例。这样的类常用来进行资源治理。
  需要治理的资源包括软件外部资源,譬如,每台 计算机可以有若干个打印机,但只能有一个打印处理器软件。每台计算机可以有若干传真卡,但是 只应该有一个传真软件治理传真。每台计算机可以有若干通讯端口,你的软件应当集中治理这些 通讯端口,以避免同时一个通讯端口被两个请求同时调用。
  需要治理的资源包括软件内部资源,譬如,大多数的软件都有一个(甚至多个)属性(properties)文件 存放系统配置。这样的系统应当有一个对象来治理一个属性文件。很多软件都有数据库,一般而言, 整个软件应当使用一个联接通道,而不是任意在需要时就新打开一个联接通道。
  需要治理的软件内部资源也包括譬如负责纪录网站来访人数的部件,记录软件系统内部事件、出错 信息的部件,或是进行系统表现监查的的部件,等等。这些部件都必须集中治理,不可政出多头。
  单态类的特性
  综合而言,
  1、单态类只可有一个实例。
  2、它必须自己创立自己这唯一的一个实例。
  3、它必须给所有其它的类提供自己这一实例。
  最后,单态类在理论和实践上都并非限定只能有"一个"实例,而是很轻易推广到任意有限个实例的情况。
  单态模式的几种实现
  由于爪哇语言的特点,使得单态模式在爪哇语言的实现有自己的特点。这些特点主要表现在怎样实例化上。
  饿汉式单态类
  饿汉式单态类是在爪哇语言里实现得最为简便的单态类。
   爪哇语言单态创立性模式介绍(上)(图二)
  图2.饿汉式单态类的UML类图 
  图中的关系线表明,此类自已将自己实例化。
  package com.javapatterns.singleton.demos;
  public class EagerSingleton {
  private EagerSingleton() { }
  public static EagerSingleton getInstance() {
  return m_instance;
  }
  private static final EagerSingleton m_instance = new EagerSingleton();
  }
  代码清单2.饿汉式单态类。
  值得指出的是,由于构造子是私有的,因此此类不能被继续。
  懒汉式单态类
  懒汉式单态类在第一次被引用时将自己实例化。假如加载器是静态的,那么在懒汉式单态类被加载时不 会将自己实例化。
  package com.javapatterns.singleton.demos;
  public class LazySingleton {
  private LazySingleton() { }
  
  public static LazySingleton getInstance()
  {
   if (m_instance == null)
   {
  file://More than one threads might be here!!!
  synchronized(LazySingleton.class)
  {
   if (m_instance == null)
   {
    m_instance = new LazySingleton();
   }
  }
   }
   return m_instance;
  }
  private static LazySingleton m_instance = null;
  }               代码清单3.懒汉式单态类。
  爪哇语言单态创立性模式介绍(上)(图三)
  图3.懒汉式单态类
  图中的关系线表明,此类自已将自己实例化。
  读者可能会注重到,在上面给出 懒汉式单态类实现里,使用了在多线程编程中常要使用的,闻名的双重检查原则。对双重检查原则 和多线程编程要点不十分熟悉的读者,可以看看后面给出的问答题。
  同样,由于构造子是私有的,因此此类不能被继续。
  饿汉式单态类在自己被加载时就将自己实例化。既便加载器是静态的,在饿汉式单态类被加载时仍 会将自己实例化。单从资源利用效率角度来讲,这是比懒汉式单态类稍差些。从速度和反应时间角度来 讲,则比懒汉式单态类稍好些。然而,懒汉式单态类在实例化时必须处理好在多个线程同时首次引 用此类时,实例化函数内部要害段的访问限制问题。非凡是当单态类作为资源控器,在实例化时必然涉及 资源初始化,而资源初始化很有可能耗费时间。这意味着出现多线程同时首次引 用此类的几率变得较大。
  饿汉式单态类可以在爪哇语言内实现,但不易在C++内实现,因为静态初始化在C++里没有固定的顺序, 因而静态的m_instance变量的初始化与类的加载顺序没有保证,可能会出问题。这就是为什么GoF在提出 单态类的概念时,举的例子是懒汉式的。他们的书影响之大,以致爪哇语言中单态类的例子也大多是 懒汉式的。实际上,作者认为饿汉式单态类更符合爪哇语言本身的特点。
上一篇:爪哇语言结构性模式之变压器模式介绍(上) 人气:621
下一篇:爪哇语言单态创立性模式介绍(下) 人气:378
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-9-6 Movie34电影搜索引擎 v3.0
2008-9-6 wap2.0仿帝国建站喜用 v2.0
2008-9-6 免费人才招聘网 宽屏版 v3.01
2008-9-6 喜喔喔视频采集程序 v1.0 beta
2008-9-6 ASP客户管理系统
2008-9-6 主流驿站中秋祝福程序
2008-9-6 php实现msn协议的类
2008-9-5 Coppermine Photo Gallery v1.4.
2008-9-5 清松网络日记本 v2.4
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号