- 浏览: 182606 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (99)
- 备忘录 (48)
- linux (19)
- oracle (10)
- shell (8)
- awk (1)
- java (48)
- just do it (29)
- more and more (46)
- common (29)
- 设计模式 (8)
- Java Web (9)
- Spring (0)
- Structs 2 (2)
- Java 高级 (4)
- 存储 (3)
- Virtual Box (1)
- ant (1)
- maven (0)
- 数据结构 (5)
- 算法 (5)
- javascript (1)
- ajax (1)
- jquery (1)
- xml (1)
- IBM (3)
- 转载 (3)
- English (2)
- html&css (0)
- hibernate (2)
- mysql (1)
- memcached (1)
最新评论
-
飞出四季做的茧:
kris_zhang 写道int temp = 0 ; ...
Java IO流 Zip文件的压缩和解压缩 -
kris_zhang:
int temp = 0 ; while(( ...
Java IO流 Zip文件的压缩和解压缩 -
welcomezhang:
学习了,这块自己还得深挖下
为什么HashMap不是线程安全的 -
fomeiherz:
这个写的最详细了,赞一个
Java的泛型类和泛型方法 -
beijishiqidu:
hanmiao 写道http://yangguangfu.it ...
Java设计模式之策略模式
首先:郑重声明:本文来自http://www.uml.org.cn/oobject/oobject08081.htm,在此强调此文并非本人所写,如有侵权,请及时告知,本人会在知道后的第一时间删除,谢谢。
开发Java应用程序时,开发者要想有效地利用统一建模语言(UML),必须全面理解UML元素以及这些元素如何映射到Java。本文重点讨论UML类图中的元素。
类图是最常用的UML图,它用于描述系统的结构化设计。其中包括类关系以及与每个类关联的属性及行为。类图能出色地表示继承与合成关系。为了将类图作为一种高效的沟通工具使用,开发者必须理解如何将类图上出现的元素转换到Java中。下面来进一步探索这一转换过程。
元素
在后面的小节中,分别讲解了类图的各个元素及其在Java中相应的表示。我会列出元素名,后续简短的代码片断和一幅图来表示元素在类图上的样子。每一节的最后简要总结了该元素。
类(Class)
类(图A)是对象的蓝图,其中包含3个组成部分。第一个是Java中定义的类名。第二个是属性(attributes)。第三个是该类提供的方法。
属性和操作之前可附加一个可见性修饰符。加号(+)表示具有公共可见性。减号(-)表示私有可见性。#号表示受保护的可见性。省略这些修饰符表示具有package(包)级别的可见性。如果属性或操作具有下划线,表明它是静态的。在操作中,可同时列出它接受的参数,以及返回类型,如图A的“Java”区域所示。
图A
包(Package)
包(图B)是一种常规用途的组合机制。UML中的一个包直接对应于Java中的一个包。在Java中,一个包可能含有其他包、类或者同时含有这两者。进行建模时,你通常拥有逻辑性的包,它主要用于对你的模型进行组织。你还会拥有物理性的包,它直接转换成系统中的Java包。每个包的名称对这个包进行了惟一性的标识。
图B
接口(Interface)
接口(图C)是一系列操作的集合,它指定了一个类所提供的服务。它直接对应于Java中的一个接口类型。接口既可用图C的那个图标来表示,也可由附加了<<interface>>的一个标准类来表示。通常,根据接口在类图上的样子,就能知道与其他类的关系。
图C
关系
后面的例子将针对某个具体目的来独立地展示各种关系。虽然语法无误,但这些例子可进一步精炼,在它们的有效范围内包括更多的语义。
依赖(Dependency)
实体之间一个“使用”关系暗示一个实体的规范发生变化后,可能影响依赖于它的其他实例(图D)。更具体地说,它可转换为对不在实例作用域内的一个类或对象的任何类型的引用。其中包括一个局部变量,对通过方法调用而获得的一个对象的引用(如下例所示),或者对一个类的静态方法的引用(同时不存在那个类的一个实例)。也可利用“依赖”来表示包和包之间的关系。由于包中含有类,所以你可根据那些包中的各个类之间的关系,表示出包和包的关系。
图D
关联(Association)
实体之间的一个结构化关系表明对象是相互连接的。箭头是可选的,它用于指定导航能力。如果没有箭头,暗示是一种双向的导航能力。在Java中,关联(图E)转换为一个实例作用域的变量,就像图E的“Java”区域所展示的代码那样。可为一个关联附加其他修饰符。多重性(Multiplicity)修饰符暗示着实例之间的关系。在示范代码中,Employee可以有0个或更多的TimeCard对象。但是,每个TimeCard只从属于单独一个Employee。
图E
聚合(Aggregation)
聚合(图F)是关联的一种形式,代表两个类之间的整体/局部关系。聚合暗示着整体在概念上处于比局部更高的一个级别,而关联暗示两个类在概念上位于相同的级别。聚合也转换成Java中的一个实例作用域变量。
关联和聚合的区别纯粹是概念上的,而且严格反映在语义上。聚合还暗示着实例图中不存在回路。换言之,只能是一种单向关系。
图F
合成(Composition)
合成 (图G)是聚合的一种特殊形式,暗示“局部”在“整体”内部的生存期职责。合成也是非共享的。所以,虽然局部不一定要随整体的销毁而被销毁,但整体要么负责保持局部的存活状态,要么负责将其销毁。局部不可与其他整体共享。但是,整体可将所有权转交给另一个对象,后者随即将承担生存期职责。
Employee和TimeCard的关系或许更适合表示成“合成”,而不是表示成“关联”。
图G
泛化(Generalization)
泛化(图H)表示一个更泛化的元素和一个更具体的元素之间的关系。泛化是用于对继承进行建模的UML元素。在Java中,用extends关键字来直接表示这种关系。
图H
实现(Realization)
实例(图I)关系指定两个实体之间的一个合同。换言之,一个实体定义一个合同,而另一个实体保证履行该合同。对Java应用程序进行建模时,实现关系可直接用implements关键字来表示。
图I
精确映射
如本文所述,UML类图上的元素能精确映射到Java编程语言。开发团队的成员可利用这种精确性来加强沟通,取得对系统结构化设计的共识。
开发Java应用程序时,开发者要想有效地利用统一建模语言(UML),必须全面理解UML元素以及这些元素如何映射到Java。本文重点讨论UML类图中的元素。
类图是最常用的UML图,它用于描述系统的结构化设计。其中包括类关系以及与每个类关联的属性及行为。类图能出色地表示继承与合成关系。为了将类图作为一种高效的沟通工具使用,开发者必须理解如何将类图上出现的元素转换到Java中。下面来进一步探索这一转换过程。
元素
在后面的小节中,分别讲解了类图的各个元素及其在Java中相应的表示。我会列出元素名,后续简短的代码片断和一幅图来表示元素在类图上的样子。每一节的最后简要总结了该元素。
类(Class)
类(图A)是对象的蓝图,其中包含3个组成部分。第一个是Java中定义的类名。第二个是属性(attributes)。第三个是该类提供的方法。
属性和操作之前可附加一个可见性修饰符。加号(+)表示具有公共可见性。减号(-)表示私有可见性。#号表示受保护的可见性。省略这些修饰符表示具有package(包)级别的可见性。如果属性或操作具有下划线,表明它是静态的。在操作中,可同时列出它接受的参数,以及返回类型,如图A的“Java”区域所示。
图A
包(Package)
包(图B)是一种常规用途的组合机制。UML中的一个包直接对应于Java中的一个包。在Java中,一个包可能含有其他包、类或者同时含有这两者。进行建模时,你通常拥有逻辑性的包,它主要用于对你的模型进行组织。你还会拥有物理性的包,它直接转换成系统中的Java包。每个包的名称对这个包进行了惟一性的标识。
图B
接口(Interface)
接口(图C)是一系列操作的集合,它指定了一个类所提供的服务。它直接对应于Java中的一个接口类型。接口既可用图C的那个图标来表示,也可由附加了<<interface>>的一个标准类来表示。通常,根据接口在类图上的样子,就能知道与其他类的关系。
图C
关系
后面的例子将针对某个具体目的来独立地展示各种关系。虽然语法无误,但这些例子可进一步精炼,在它们的有效范围内包括更多的语义。
依赖(Dependency)
实体之间一个“使用”关系暗示一个实体的规范发生变化后,可能影响依赖于它的其他实例(图D)。更具体地说,它可转换为对不在实例作用域内的一个类或对象的任何类型的引用。其中包括一个局部变量,对通过方法调用而获得的一个对象的引用(如下例所示),或者对一个类的静态方法的引用(同时不存在那个类的一个实例)。也可利用“依赖”来表示包和包之间的关系。由于包中含有类,所以你可根据那些包中的各个类之间的关系,表示出包和包的关系。
图D
关联(Association)
实体之间的一个结构化关系表明对象是相互连接的。箭头是可选的,它用于指定导航能力。如果没有箭头,暗示是一种双向的导航能力。在Java中,关联(图E)转换为一个实例作用域的变量,就像图E的“Java”区域所展示的代码那样。可为一个关联附加其他修饰符。多重性(Multiplicity)修饰符暗示着实例之间的关系。在示范代码中,Employee可以有0个或更多的TimeCard对象。但是,每个TimeCard只从属于单独一个Employee。
图E
聚合(Aggregation)
聚合(图F)是关联的一种形式,代表两个类之间的整体/局部关系。聚合暗示着整体在概念上处于比局部更高的一个级别,而关联暗示两个类在概念上位于相同的级别。聚合也转换成Java中的一个实例作用域变量。
关联和聚合的区别纯粹是概念上的,而且严格反映在语义上。聚合还暗示着实例图中不存在回路。换言之,只能是一种单向关系。
图F
合成(Composition)
合成 (图G)是聚合的一种特殊形式,暗示“局部”在“整体”内部的生存期职责。合成也是非共享的。所以,虽然局部不一定要随整体的销毁而被销毁,但整体要么负责保持局部的存活状态,要么负责将其销毁。局部不可与其他整体共享。但是,整体可将所有权转交给另一个对象,后者随即将承担生存期职责。
Employee和TimeCard的关系或许更适合表示成“合成”,而不是表示成“关联”。
图G
泛化(Generalization)
泛化(图H)表示一个更泛化的元素和一个更具体的元素之间的关系。泛化是用于对继承进行建模的UML元素。在Java中,用extends关键字来直接表示这种关系。
图H
实现(Realization)
实例(图I)关系指定两个实体之间的一个合同。换言之,一个实体定义一个合同,而另一个实体保证履行该合同。对Java应用程序进行建模时,实现关系可直接用implements关键字来表示。
图I
精确映射
如本文所述,UML类图上的元素能精确映射到Java编程语言。开发团队的成员可利用这种精确性来加强沟通,取得对系统结构化设计的共识。
发表评论
-
cgroups控制cpu,memory,io使用率
2016-08-09 22:55 2661Cgroups是control groups的缩写,最初由Go ... -
为什么HashMap不是线程安全的
2016-06-15 22:27 2291序 最近因为项目的需求,经常会面试一些新人,也就会问他们 ... -
JAVA读取文件夹大小的几种方法实例
2016-04-24 15:39 776总是发现自己的C盘快满了,清理程序也不会帮我自己清理,然后 ... -
Java Regex - Matcher (java.util.regex.Matcher)
2015-03-01 13:59 884The Java Matcher class (java. ... -
Java Regex - Pattern (java.util.regex.Pattern)
2015-03-01 11:22 1577Java中的Pattern类是Java正则表达式API ... -
eclipse中查看jdk的源码
2014-11-23 11:43 1070最近一段时间跟jdk源码打交道的比较多,但是有的时候却是看 ... -
Oracle常见死锁发生的原因以及解决办法
2014-08-31 13:25 7563一,删除和更新之间引起的死锁 造成死锁的原因就是多个线程 ... -
Struts2学习初设系列(一)之环境搭建
2014-07-20 22:47 1107已经毕业很长时间了,回过头来想想都不知道自己做了什么,由于 ... -
算法的时间复杂度分析
2014-07-20 11:14 16812.9.1 算法时间复杂度定义 在进 ... -
解析 Java 类和对象的初始化过程
2014-07-06 18:14 683问题引入 近日我在调试一个枚举类型的解析器程序,该 ... -
Java 中正确使用 hashCode 和 equals 方法
2014-07-05 18:17 688在这篇文章中,我将告诉大家我对hashCode和equals ... -
通过分析 JDK 源代码研究 Hash 存储机制
2014-07-05 17:22 649集合和引用 就像引 ... -
NIO 入门
2014-07-05 17:15 675在开始之前 关于本教程 新的输入/输出 (NIO) 库 ... -
利用AJax方式提交和Webservice完成页面输入汉字简体字回显繁体字
2014-06-29 18:05 1186最近一直在学习新的 ... -
How To Parse XML File Using XPath In Java
2014-06-29 11:59 1341最近一直在学习XML的Xpath解析方式,据说是一个很简单 ... -
Java排序算法之快速排序
2014-06-22 11:27 856快速排序使用分治法(Divide and conquer)策略 ... -
Java排序算法之简单选择排序
2014-06-21 22:31 802在网上搜索了很多的算法,貌似大家说的简单选择排序算法和直接选择 ... -
Java排序算法之冒泡排序
2014-06-21 20:22 1036冒泡排序算法的基本思想是:首先将第n-1个记录的关键字和第n个 ... -
Java排序算法之直接插入排序
2014-06-21 19:33 1238直接插入排序算法的基本思想是:把n个待排序的元素看成为 ... -
JAVA之桥接模式
2014-05-26 20:11 0桥模式:将某个问题抽象的不同形式分别与该问题的具体实现 ...
相关推荐
2. **设计阶段**:UML类图、组件图和部署图等可以帮助开发者更好地组织和规划系统的架构。 3. **编码阶段**:通过活动图、状态图等可以清晰地展示系统的动态行为,有助于编写高质量的代码。 4. **测试阶段**:使用...
主要分为以下几个部分: 1. **实体类**:如Player、Card、Deck等,用于创建游戏对象并存储相关信息。 2. **控制类**:如GameController,负责游戏流程的控制,如发牌、出牌、判断游戏结束等。 3. **规则类**:如...
《UML与Java关系解析》 UML(Unified Modeling Language),即统一建模语言,是软件工程领域一种广泛使用的建模工具,它提供了一种图形化的方式来...因此,深入学习并熟练应用UML是每个Java程序员应该具备的技能之一。
首先,我们要理解UML是一种标准化的建模语言,它为软件开发提供了一种可视化的方法,涵盖了系统分析、设计和实现的各个阶段。在学生管理系统中,主要会用到以下几种UML图: 1. **用例图(Use Case Diagram)**:...
UML2.0在系统工程中的应用主要体现在以下几个方面: - **需求捕获与可视化**:UML2.0通过用例图和类图等,帮助工程师捕捉和可视化系统的需求,确保需求的完整性和一致性。 - **架构与接口描述**:通过组件图和部署图...
在Java实现中,适配器模式通常包括以下几个关键角色: 1. 目标接口(Target):这是客户端希望使用的接口。 2. 被适配者(Adaptee):这是需要适配的类,其接口与目标接口不兼容。 3. 适配器(Adapter):实现了目标...
Java UML(统一建模语言)是软件开发中一种重要的工具,它用于描述和可视化Java应用程序的结构和行为。在大型项目中,UML作为系统分析和设计的关键部分,可以帮助团队成员更好地理解、沟通和组织复杂的代码逻辑。这...
Java与UML的协同工作流程通常包括以下几个步骤: 1. 需求分析:通过与客户交流,使用用例图来明确系统的需求和功能。这有助于确定系统的边界和主要参与者。 2. 系统设计:利用UML的类图和组件图来设计系统的架构,...
### 在Java中使用NetBeans工具创建UML图 #### 使用类图 类是定义对象属性和行为的基础单元,在面向对象编程中...通过遵循上述步骤,可以有效地使用NetBeans IDE创建和管理UML类图,从而提高软件开发的效率和质量。
Java 与 UML 的紧密联系体现在以下几个方面: - **类图**: UML 类图用于描述系统的静态视图,展示类及其之间的关系。在 Java 中,这些类图可以直接映射到具体的类定义。 - **顺序图**: UML 顺序图显示了对象之间的...
在Java编程中,UML主要体现在以下几个方面: 1. **类图(Class Diagram)**:UML类图用于表示Java类的结构,包括类的属性、方法、构造器以及类之间的关系,如继承、关联、聚合和组合。通过类图,开发者可以清晰地看到...
在“Java 与 UML 面向对象程序设计源码”这个主题中,我们可以深入探讨以下几个关键知识点: 1. **面向对象编程基础**:面向对象编程(OOP)的核心概念包括类、对象、继承、封装、多态和接口。Java 作为 OOP 语言,...
在本主题中,我们将深入探讨如何使用Java编程语言和统一建模语言(Unified Modeling Language,简称UML)进行有效的面向对象设计。 **Java OOD基础** Java是一种广泛使用的面向对象编程语言,它的核心设计理念就是...
标题 "UDoc Java代码分析UML" 涉及到的是一个工具或库,用于将Java源代码转换成UML(统一建模...通过阅读提供的文档(如readme和changelog),以及探索源代码和库文件,用户可以更深入地了解UDoc的工作原理和使用方法。
1. **类图(Class Diagram)**:类图是UML中最基本的图表之一,用于表示类、接口和它们之间的关系,如继承、关联、依赖等。在Java编程中,类图可以帮助程序员设计出更加模块化的代码结构。 2. **用例图(Use Case ...
理解UML图的种类和使用方法,对于进行软件设计和分析至关重要,尤其对Java和C#这样的面向对象语言的架构师来说,掌握UML是提升设计质量和沟通效率的重要工具。 在学习UML的过程中,可以参考"UML详解"文档,了解UML...
在选择和使用迷你UML工具时,需要注意以下几点: 1. 用户界面:一个直观且易用的界面可以提高工作效率,减少学习成本。 2. 功能完整性:虽然体积小,但工具应包含基本的UML图类型,满足不同场景的需求。 3. 文件...
根据给定的标题和描述,“Java高手真经系统架构卷Java Web系统设计与架构UML建模+设计模式+面向服务架构”,我们可以深入探讨几个关键的IT知识点:Java Web系统设计、UML建模、设计模式以及面向服务架构(SOA)。...
UML的发展历史可以简单概括为以下几个关键的阶段: - 在20世纪70年代末到80年代初,软件工程界开始重视图形化建模技术,出现了如Yourdon-DeMarco和Ward-Mellor等方法论。 - 1980年代中期,出现了Smalltalk等早期的...