
java设计模式 四大常用架构 迭代模型 并行排序算法.pdf
35页设计模式设计模式20 世纪 60 年代的软件危机使得人们开始重视软件工程的研究起初,人们把软件设计的重点放在数据结构和算法的选择上随着软件系统规模越来越大、越来越复杂,整个系统的结构和规格说明也显得越来越重要面对日益复杂的软件系统,人们开始认识到,要真正实现软件的工业化生产方式, 达到软件产业发展所需要的软件生产率和质量, 软件复用是一条现实可行的途径1995 年,《Design Pattern》(中译“设计模式”)一书问世,成为面向对象编程中使用模式化方法的开创性著作 这本书对于软件实践中的一些不断变换面孔重复出现、 但特征和解决方案的本质却十分类似的问题进行了总结归纳,提炼出 23 个具有代表性的模式设计模式本身并不是一种具体的“技术”,它讲述的是思想它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧,还让开发人员能够真正掌握接口或抽象类的应用更重要的是,该书提炼的这些设计模式反复强调的宗旨是尽量提高程序的使用率,让程序尽可能的可重用Java 中的设计模式Java 语言作为面向对象编程语言的优秀代表, 它拥有简单易用的特性, 以及强大的功能,非常有利于设计模式的实施Java 发展到现在,按应用主要分为三大块:J2SE、J2ME 和 J2EE,这也就是 Sun ONE(Open Net Environment)体系。
J2SE 就是 Java2 的标准版,主要用于桌面应用软件的编程;J2ME 主要应用于嵌入式系统开发,如和 PDA 的编程;J2EE 是 Java2 的企业版,主要用于大型分布式网络程序的开发,如电子商务网站和 ERP 系统Java技术已经逐渐成为电子商务主流技术之一在 Java 的各个平台中,设计模式有很多精彩的应用,而且随着 Java 技术的不断发展,设计模式也在不断丰富J2SE 与设计模式早期发布的设计模式主要来自桌面应用软件的开发经验在《Design Pattern》一书中,所有的模式都是通过面向桌面应用的窗口程序来举例说明的相应的在 J2SE 中,贯穿了设计模式的思想,尤其是大量运用了 MVC 模式所谓 MVC 模式,是指模型(Model)、视图(View)和控制(Control)相分离的设计方案模型(Model)是执行某些任务的代码至于这些任务以什么形式显示给用户,却并不是模型所关注的问题模型只有纯粹的功能性的接口,也就是一系列的公开方法这些方法有的是取值方法,让系统其它部分可以得到模型端的内部状态参数;有的是改值方法,允许外部修改模型的内部状态视图决定模型以什么样的方式显示给用户。
一个模型可以对应多个视图, 那么对于视图而言,模型就是可重用的代码一般来说,模型内部必须留下所有对应视图的记录,以便在模型的状态发生改变的时候,可以通知视图模型的状态一旦发生改变,所有对应的视图都能够得到更新控制是和视图联合使用的用户在与视图发生交互的时候,是通过控制器来操纵模型,从而向模型传递数据、更新模型的状态例如,一个表格数据体可以看作是一个模型,它可以对应成为多种视图,比如饼图、棒图或者直接显示成为一个表格 用户通过键盘和鼠标与视图进行交互, 从而激发相应的控制器改变表格数据一旦表格数据发生变化,视图会得到通知,进而更新显示的形式MVC 模式是最著名的模式之一J2SE 中一些复杂的显示控件(如表格、列表、树等),都使用了这种模式,从而使得设计结构非常清晰而且灵活当然,也有人提出,MVC 模式不应当被称为“设计模式”,而应当属于“架构模式”它可以看作若干个设计模式的组合,并且在不同的应用环境中衍生出了其它的一些设计模式但是在各种讨论中,MVC 模式还是常常被当作设计模式J2EE 与设计模式J2EE 属于一种框架软件什么是框架软件?它不同于以前接触的 Java API 等,那些 API 属于 Toolkit(工具箱)。
而 J2EE 不再被动地被使用、被调用,而是深刻地介入到一个领域中去J2EE 设计的目的是将企业计算应用领域中不变的东西先定义好,比如整体结构和一些主要职责(如数据库操作、事务跟踪和安全等),剩余的就是变化的东西,即针对这个领域中具体应用所产生的不同的变化需求,而这些变化的东西就是 J2EE 程序员所要做的因此,设计模式和 J2EE 在思想和动机上是一脉相承的只不过设计模式更抽象,几乎可以用于任何应用;J2EE 则是适合企业计算应用的框架软件,而设计模式是它的重要的理论基础之一与此同时,在 J2EE 的框架下,一些应用级的设计模式也逐步积累了起来,关于设计模式在 J2EE 中的应用已成为许多论坛讨论的热点之一其中,J2EE Web 应用的架构设计引起了高度的关注J2EE 体系包括 JSP、Servlet、EJB、Web 服务等多项技术这些技术的出现给电子商务时代的 Web 应用开发提供了一个非常有竞争力的选择怎样把这些技术组合起来, 形成一个适应项目需要的稳定架构是项目开发过程中非常重要的步骤 此步骤一般由架构设计师完成,设计师根据项目需求,对 J2EE 体系中的各种技术进行筛选取舍,并考虑到开发过程中的角色分工、后期的运行维护,以及系统扩展性等诸多因素建立系统的架构。
一个成功的软件需要有一个成功的架构,但软件架构的建立是一个复杂而又持续改进的过程,软件开发者们不可能对每个不同的项目做不同的架构,而总是尽量重用以前的架构,或开发出尽量通用的架构方案在当前的 J2EE Web 应用中,Apache Struts 是最流行的架构方案之一它实现了 MVC模式的概念, 并将这些概念映射到 Web 应用程序的构件和概念中Struts 这个名字来源于在建筑和旧式飞机中使用的支持金属架, 其目的是帮助开发人员减少在运用 MVC 设计模型开发 Web 应用的时间Apache Struts 有以下的优点:一些开发商开始采用并推广这个框架;作为开源项目,有很多先进的实现思想;对大型应用支持的较好;有集中的网页导航定义Apache Struts 正在获得越来越多的关注与支持J2ME 与设计模式J2ME 标准为消费类产品(例如移动、双向传呼机和无线个人信息管理器)的应用开发提供支持这一类产品的特点是,显示能力和存储能力有限,计算能力和网络访问能力不够强大因此,J2ME 设计模式就有了它所独特的问题领域比如,如果需要显示比较大的数据集合,那么应该采取什么样的解决方案,才能适应狭小的显示区域?又比如,如果需要实现类似桌面软件的选单选择的功能, 那么应该如何设计才能够足够简练和便于重用?J2ME的设计模式正在逐步的积累过程中, 我们相信随着 J2ME 的推广 J2ME 设计模式的讨论也将逐步成为一大关注热点。
Java 与设计模式的结合,为 Java 的发展带来了更大的活力,也为设计模式提供了一个宽阔的舞台在这些技术的共同推动下,软件产业将以坚实的步伐走进工业化时代Java EE 开发四大常用框架开发四大常用框架StrutsStruts 是一个基于 Sun Java EE 平台的 MVC 框架,主要是采用 Servlet 和 JSP 技术来实现的Struts 框架可分为以下四个主要部分,其中三个就和 MVC 模式紧密相关:1、模型 (Model),本质上来说在 Struts 中 Model 是一个 Action 类(这个会在后面详细讨论),开发者通过其实现商业逻辑,同时用户请求通过控制器(Controller)向 Action 的转发过程是基于由 struts-config.xml 文件描述的配置信息的2、视图(View),View 是由与控制器 Servlet 配合工作的一整套 JSP 定制标签库构成,利用她们我们可以快速建立应用系统的界面3、控制器(Controller),本质上是一个 Servlet,将客户端请求转发到相应的 Action 类4、一堆用来做 XML 文件解析的工具包,Struts 是用 XML 来描述如何自动产生一些 JavaBean 的属性的,此外 Struts 还利用 XML 来描述在国际化应用中的用户提示信息的(这样一来就实现了应用系统的多语言支持)。
SpringSpring 是轻量级的 Java EE 应用程序框架Spring 的核心是个轻量级容器(container), 实现了 IoC(Inversion of Control)模式的容器,Spring 的目标是实现一个全方位的整合框架,在 Spring 框架下实现多个子框架的组合,这些子框架之间彼此可以独立,也可以使用其它的框架方案加以替代,Spring 希望提供 one-stop shop 的框架整合方案 Spring 不会特別去提出一些子框架来与现有的 OpenSource 框架竞争,除非它觉得所提出的框架夠新夠好, 例如 Spring 有自己的 MVC 框架方案, 因为它觉得现有的 MVC 方案有很多可以改进的地方, 但它不强迫您使用它提供的方案, 您可以选用您所希望的框架来取代其子框架,例如您仍可以在 Spring 中整合您的 Struts 框架 Spring 的核心概念是 IoC,IoC 的抽象概念是[依赖关系的转移],像是[高层模组不应该依赖低层模组,而是模组都必须依赖于抽象]是 IoC 的一种表现,[实现必须依赖抽象,而不是抽象依赖实现]也是 IoC 的一种表现,[应用程序不应依赖于容器,而是容器服务于应用程序]也是 IoC 的一种表现。
Spring 的架构性的好处的架构性的好处Spring 能有效地组织你的中间层对象,无论你是否选择使用了 EJB如果你仅仅使用了Struts 或其他的包含了 Java EE 特有 APIs 的 framework, 你会发现 Spring 关注了遗留下的问题Spring 能消除在许多工程上对 Singleton 的过多使用根据我的经验,这是一个主要的问题,它减少了系统的可测试性和面向对象特性Spring 能消除使用各种各样格式的属性定制文件的需要,在整个应用和工程中,可通过一种一致的方法来进行配置 曾经感到迷惑, 一个特定类要查找迷幻般的属性关键字或系统属性,为此不得不读 Javadoc 乃至源编码吗?有了 Spring,你可很简单地看到类的 JavaBean 属性倒置控制的使用(在下面讨论)帮助完成这种简化Spring 能通过接口而不是类促进好的编程习惯,减少编程代价到几乎为零Spring 被设计为让使用它创建的应用尽可能少的依赖于他的 APIs在 Spring 应用中的大多数业务对象没有依赖于 Spring使用用 Spring 构建的应用程序易于单元测试构建的应用程序易于单元测试Spring 能使 EJB 的使用成为一个实现选择,而不是应用架构的必然选择。
你能选择用 POJOs 或 local EJBs 来实现业务接口,却不会影响调用代码Spring 帮助你解决许多问题而无需使用 EJBSpring 能提供一种 EJB 的替换物,它们适于许多 web 应用例如,Spring 能使用 AOP 提供声明性事务而不通过使用 EJB 容器,如果你仅仅需要与单个的数据库打交道,甚至不需要 JTA 实现Spring 为数据存取提供了一致的框架,不论是使用 JDBC 或 O/R mapping 产品(如 Hibernate)Spring 确实使你能通过最简单可行的解决办法解决你的问题这些特性是有很大价值的Spring 能做什么?Spring 提供许多功能,在此我将快速地依次展示其各个主要方面任务描述:首先,让我们明确 Spring 范围尽管 Spring 覆盖了许多方面,但我们已经有清楚的概念,它什么应该涉及和什么不应该涉及Spring 的主要目的是使 Java EE 易用和促进好编程习惯Spring 不重新开发已有的东西因此,在 Spring 中你将发现没有日志记录的包,没有连接池,没有分布事务调度这些均有开源项。
