设计模式概述及UML的类图
1.设计模式概述
1)简介
设计模式是面向对象设计中反复出现的问题的解决方案。这个术语的含义还存有争议。算法不是设计模式,因为算法致力于解决问题而非设计问
题。设计模式通常描述了一组相互紧密作用的类与对象。设计模式提供一种讨论软件设计的公共语言,使得熟练设计者的设计经验可以被初学者
和其他设计者掌握。设计模式还为软件重构提供了目标。
2)历史
肯特·贝克和沃德·坎宁安在1987年利用克里斯托佛·亚历山大在建筑设计领域里的思想开发了设计模式并把此思想应用在Smalltalk中的图形用户接
口的生成中。一年后Erich Gamma在他的苏黎世大学博士毕业论文中开始尝试把这种思想改写为适用于软件开发。与此同时James Coplien 在
1989年至1991 年也在利用相同的思想致力于C++的开发,而后于1991年发表了他的著作Advanced C++ Idioms。就在这一年Erich Gamma 得到
了博士学位,然后去了美国,在那与Richard Helm, Ralph Johnson ,John Vlissides合作出版了Design Patterns - Elements of Reusable Object-
Oriented Software 一书,在此书中共收录了23个设计模式。这四位作者在软件开发领域里也以他们的匿名著称Gang of Four(四人帮,简称GoF),
并且是他们在此书中的协作导致了软件设计模式的突破。有时这个匿名GoF也会用于指代前面提到的那本书。
3)模式要素
模式名称(Pattern Name):每一个模式都有自己的名字,模式的名字使得我们可以讨论我们的设计。
问题(Problem):在面向对象的系统设计过程中反复出现的特定场合,它导致我们采用某个模式。
解决方案(Solution):上述问题的解决方案,其内容给出了设计的各个组成部分,它们之间的关系、职责划分和协作方式。
效果(Consequence):采用该模式对软件系统其他部分的影响,比如对系统的扩充性、可移植性的影响。影响也包括负面的影响。
别名(Also Known As):一个模式可以有超过一个以上的名称。这些名称应该要在这一节注明。
动机(Motivation):该模式应该利用在哪种情况下是本节提供的方案(包括问题与来龙去脉)的责任。
应用(Applicability)
结构(Structure):这部分常用类图与互动图阐述此模式。
参与者(Participants):这部分提供一份本模式用到的类与物件清单,与它们在设计下扮演的角色。
合作(Collaboration):描述在此模式下,类与物件间的互动。
结果(Consequences):这部分应描述使用本模式後的结果、副作用、与交换(trade-off)
实现(Implementaion):这部分应描述实现该模式、该模式的部分方案、实现该模式的可能技术、或者建议实现模式的方法。
例程(Sample Code):示范程式。
已知应用(Known Uses):业界已知的实做范例。
相关模式(Related Patterns):这部分包括其他相关模式,以及与其他类似模式的不同。
4)设计模式遵循的六大原则
①开闭原则:一个实体类或者模块的扩展开放的,修改是封闭的。
②单一职责原则:一个类只做一件事,当这个类修改时也应该只有一个原因。
③里氏替换原则:子类可以替换父类。使用继承时,只扩展,不破坏原有的功能。
④依赖倒置原则:面向接口编程,依赖于抽象而不依赖于具体。写代码时用到具体类时,不与具体类交互,而与具体类的上层接口交互。
⑤接口隔离原则:每个接口的方法都要保证子类可以用而去实现,否则必须将接口拆分。
⑥迪米特原则:又名「最少知道原则」,一个类不应知道自己操作的类的细节,换言之,只和朋友谈话,不和朋友的朋友谈话。
5)GoF的23种设计模式
设计模式有两种分类方式,即根据目的和作用范围。
①根据目的来分
可分为创建型模式、结构型模式、行为型模式3种。
a.创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。
GoF 中提供了单例、原型、工厂方 法、抽象工厂、建造者等 5 种创建型模式。
b.结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF 中提供了代理、适配器、桥接、装饰、外观、享
元、组合等 7 种结构型模式。
c.行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以及怎样分配职责。
GoF 中提 供了模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器等 11 种行为型模式。
②根据作用范围来分
可分为类模式和对象模式2种。
a.类模式:用于处理类与子类之间的关系,这些关系通过继承来建立,是静态的,在编译时刻便确定下来了。
GoF中的工厂方法、(类)适配器、模板方法、解释器属于该模式。
b.对象模式:用于处理对象之间的关系,这些关系可以通过组合或聚合来实现,在运行时刻是可以变化的,更具动态性。
GoF 中除了以上 4 种,其他的都是对象模式。
2.UML类图
1)统一建模语言的简介
统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织
(OMG)采纳为面向对象的建模语言的国际标准。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。
UML从目标系统的不同角度出发,定义了用例图,类图,对象图,状态图,活动图,时序图,协作图,构件图,部署图等9种图。
2)类,接口及类图
①类
学生类的UML表示,在UML中,类使用包含类名,属性和操作且带有分割线的矩形来表示。
类是指具有相同属性,方法和关系的对象的抽象,它封装了数据和行为,是面向对象程序设计的基础,具有封装性,继承性和多态性等三大特性。
a.类名是一个字符串,例如:Student
b.属性是指类的特性,即类的成员变量。
UML中表示:【可见性】属性名:类型【=默认值】
如:-name:String
- 可见性:表示该属性对类外的元素是否可见,包括:public,private,protected,friendly4种,在类图中分别用+,-,#,~表示。
c.操作是类的任意一个实例对象都可以使用的行为,是类的成员方法。
UML中表示为:【可见性】名称(参数列表)【:返回类型】
如:+display():void
②接口
接口是一种特殊的类,它具有类的结构但不可被实例化,只可以被子类实现,它包含抽象操作,但不包含属性。它描述了类或组件对外可见的动作。在UML中,接口使用一个带有名称的小圆圈来进行表示。
③类图
类图是用来显示系统中的类,接口,协作以及它们之间的静态结构和关系的一种静态模型。
设计模式概述及UML的类图相关推荐
- 【设计模式】设计模式概述以及UML图
设计模式概述以及UML图 设计模式概述 1. 设计模式的概念 2. 学习设计模式的必要性 3. 设计模式的分类 UML图 1. 什么是UML图 2. 类图的概念和作用 3. 类图的表示法 4. 类与类 ...
- [UML]UML系列——类图class的关联关系(聚合、组合)
关联的概念 关联用来表示两个或多个类的对象之间的结构关系,它在代码中表现为一个类以属性的形式包含对另一个类的一个或多个对象的应用. 程序演示:关联关系(code/assocation) 假设:一个公司 ...
- java中类图概念,程序员眼中的UML(4)--类图释疑之一,Attribute和Property之区别
程序员眼中的UML(4) --类图释疑之一,Attribute和Property之区别 上一篇中提出了很多问题,其中最令人费解的可能就是Attribute和Property之区别了吧.我在网络上寻找良 ...
- Eclipse 答疑:Eclipse 使用 Amateras UML 创建类图点击 Finish 没反应解决方式汇总
文章目录 前言 一.问题产生场景 1.1.Amateras UML 创建类图没反应 二.问题原因分析 三.问题定位及解决 3.1.定位检查版本支持信息 3.2.问题确认过程 3.3.解决方式验证 四. ...
- UML软件工程--类图
UML 基础:类图 选自:IBM 这是关于统一建模语言.即UML 里采用的基本图的一系列文章的一部分.在我 先前关于序列图的文章 里,我把重点从 UML 1.4 版,转移到 OMG的采用UML 2.0 ...
- 建立对象模型即使用UML画类图
UML类图画法及其之间的几种关系 最近复习软件工程的考试,大题需要画一下类图,发现类图的画法及其之间的几种关系已经淡忘了很多, 上百度进行搜索,发现了一篇学习笔记,整理总结的不错哦 自我总结: 看见建 ...
- 设计模式(一)----设计模式概述及UML图解析
1.设计模式概述 1.1 软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中. 1977年美国著名建筑大师.加利福尼亚大学伯克利分校环境结构 ...
- 设计模式——概述、UML图、原则
文章目录 1,设计模式概述 1.1 软件设计模式的产生背景 1.2 软件设计模式的概念 1.3 学习设计模式的必要性 1.4 设计模式分类 2,UML图 2.1 类图概述 2.2 类图的作用 2.3 ...
- 【设计模式学习01】设计模式概述,UML图,软件设计原则
文章目录 1. 设计模式概述 1.1 软件设计模式的产生背景 1.2 软件设计模式的概念 1.3 学习设计模式的必要性 1.4 设计模式分类 2. UML图 2.1 类图概述 2.2 类图的作用 2. ...
最新文章
- java快速创建dto_根据数据库表对象信息快速建立Dto类详解
- 历时3年,清华大学iDLab实验室打造《强化学习和控制》课程及讲义!
- 【嵌入式干货】hex、bin转换、以及hex合成工具(基于Python)
- 2.9 logistic 回归中的梯度下降法
- 教你如何监控 Apache?
- SharePoint 入门书籍推荐 转载来源http://www.cnblogs.com/jianyus/p/3513238.html
- 图像增强算法效果评价指标及实现
- 图文教程使用一套键鼠控制两台电脑
- Win7系统显示文件扩展名的方法
- Spring核心机制——IoC和AOP
- 【转1】 OpenWrt Chaos Calmer 15.05使用mwan3单线多拨教程
- linux环境下,实现公共聊天室功能
- 数据分析专题报告范文6篇_数据分析系列篇(6):如何写好一个专题的分析报告...
- nc服务器修改过ip地址,nc服务器修改过ip地址
- BERYL和COMPIZ FUSION的安装与使用
- 微信打不开链接怎么办,微信跳转外部浏览器打开
- PowerManager深入分析
- 十五分钟水edusrc证书(小学生日记)
- 解决超新尔雅网课无法倍速(16+倍速冲刺)
- 微信 服务器 多开 不需要手机,实用:手把手教你不用手机号就可以完美注册微信!...