UML与软件工程
uml软件工程课程设计

uml软件工程课程设计一、课程目标知识目标:1. 掌握UML(统一建模语言)的基本概念、图示及其在软件工程中的应用。
2. 学会使用UML图(如用例图、类图、序列图等)来表达软件系统的结构和行为。
3. 了解软件工程的基本原则,理解UML在软件开发生命周期中的作用。
技能目标:1. 能够运用UML图进行软件需求分析,构建系统的逻辑模型。
2. 能够利用UML图进行软件设计,提高代码的可维护性和可读性。
3. 能够运用UML图进行团队协作,提高沟通与交流效果。
情感态度价值观目标:1. 培养学生对软件工程的兴趣,激发他们探究新技术的热情。
2. 培养学生严谨、细致的工作态度,提高他们解决实际问题的能力。
3. 培养学生团队协作精神,使他们认识到团队合作的重要性。
本课程针对高中年级学生,结合学科特点,注重理论与实践相结合,培养学生运用UML进行软件设计和分析的能力。
课程目标旨在让学生掌握UML的基本知识,提高他们在实际项目中的应用能力,同时培养他们的团队协作和沟通能力,为未来从事软件开发工作打下坚实基础。
通过本课程的学习,学生将能够更好地理解软件工程的概念,提高自身编程素养,形成积极的情感态度价值观。
二、教学内容1. UML基本概念与图示:包括UML的发展历程、基本组成元素、图示类型及用途。
- 教材章节:第一章 绪论- 内容列举:UML的定义、UML图分类、UML的基本元素(类、对象、关系、行为等)2. UML图的应用与实践:- 用例图:描述系统的功能需求,分析用户与系统的交互。
- 类图:表示系统中类的结构及类之间的关系。
- 序列图:描述对象之间的交互过程,展示动态行为。
- 状态图、活动图等其他UML图:分别描述对象的状态变化和活动流程。
- 教材章节:第二章至第五章- 内容列举:用例图、类图、序列图、状态图、活动图等UML图的基本概念、绘制方法及应用实例。
3. 软件工程原则与UML实践:- 教材章节:第六章 软件工程原则- 内容列举:软件工程的基本原则、UML在软件开发生命周期中的应用、UML与敏捷开发等。
课程标准-软件工程与UML项目化实用教程(第2版)-刘振华-清华大学出版社

《软件工程》课程标准课程信息【课程编码】:xxxxx【课程名称】:软件工程【适用专业】:计算机类各相关专业【先修课程】:C语言程序设计、SQL Server数据库技术、oracle 数据库技术、Java语言程序设计和Servlet&JSP开发技术等【后续课程】:顶岗实习【建议课时】:72课时1.课程定位《软件工程》是高等职业教育软件技术专业的专业必修课程。
本课程是一门研究和指导软件开发和维护的工程性课程,它以计算机科学理论及其他相关学科的理论为指导,采用工程化的概念、原理、规范、技术和方法进行软件工程项目的开发和维护,把经过实践证明正确的管理措施和当前能够得到最好的技术方法结合起来,以较少的代价获取高质量的软件产品。
通过本课程的学习,使学生掌握软件工程的常用工具的使用,能够熟练使用工具辅助完成软件需求分析建模、数据库设计、界面设计和管理工作。
2.课程设计理念《软件工程》作为一专业必修课程,重点要求学生学习了解与软件开发和维护有关的四个方面的主要内容——过程与模型、方法与技术、工具与环境、标准与规范。
进而通过课程实践培养学生运用软件工程工具辅助完成软件需求分析建模、软件设计、数据库设计、界面设计和管理工作的实践应用能力与创新能力,努力成为当今信息社会和知识经济时代所需要的高素质计算机人才。
3.课程目标本课程是软件技术专业的专业必修课程。
通过本课程的学习,使学生初步建立工程化意识,掌握用工程化思想(包括技术、方法与环境)开发各种软件,以软件的生命周期作为主线,了解软件工程的基本理论,进一步系统化、工程化,为今后实际工程中能够进行系统分析与设计奠定良好的基础。
3.1知识目标1)熟悉软件与软件工程基本概念和基本知识。
2)熟悉软件与软件工程基本原理和准备、实施、评价策略。
3)掌握运用一些具体的方法与技术,如软件需求规格说明书的格式叙写、软件设计方法、软件测试的步骤等。
4)熟悉软件工程主要文档编制规范。
软件工程与UML

件 开发 的效率 和软 件质量 。
11 制 定计 划 .
确 定 系 统 目标 、 能 。
从 19 9 5年 起 ,著 名 的 软 件 工 提 出 系 统 功 能 、性 能 、接 口 、可 靠 1 5 测 试 .
测 试 软 件 、排 除 错
程 学 家 Grd oc a yB o h综 合 他 原 创 的 性 、可 用 性 等 方 面 的 基 本 要 求 , 误 , 保 开 发 的 软 件 功 能 和 性 能 达 进 确
发 人 员 可 以使 用 U ML语 言 对 复 杂 求 , 计 系 统 的 体 系 结 构 和 软 件 模 统 测 试 是 测 试 已 完 成 的 系 统 软 件 设
0可 为 两 I -蘩 罩 簟 . 鏊 满 原 设 的 软 件 系 统 建 立 可 视 化 系 统 模 型 , 块 。 软 件 设 计 又{ 分 .一 个 阶 段 : 是 否 簿 足 缘0 计 的 各 项 功 能 、 性
1;
{
维普资讯
羁 终 耐 代
徐 世军
r
长 期 以 来 计 算 机 软 件 开 发 的 实 现 。 低 教 率 制 约 着 计 算 机 行 业 的 发 1 软 件 开 发 方 法 展 算 机 业 界 努 力 探 索 和 研 究 解 计
便 地 表 达 面 向对 象 的概 念 . 现 面 构 即模 块 结 构 , 义 每 个 模 块 的 主 1 6 运 行 维 护 体 定 . 首 先 必 须 把 已
向对 象 的分 析 与 设 计 风 格 。 独 立 要 功 能 和 模 块 之 问 的 联 系 ; 细 设 开 发 完 成 的 软 件 系 统 安 装 到 实 际 它 详
于 开 发 过 程 , 独 立 于 程 序 设 计 语 计 主 要 任 务 是 在 模 块 设 计 中 详 细 的 工 作 环 境 中 试 运 行 , 果 有 遗 留 如 言 ,用 U ML建 立 的 软 件 系 统 模 型 定 义 每 个 模 块 的数 据 结 构 、算 法 、 问 题 应 予 以 改 进 , 后 系 统 才 可 正 然
软件工程与UML 09 逆向工程

• 5.完成“用户登录模块”的数据库重构、网站页面设计框架。
软件工程与UML
单元九 逆向工程
目录
CONTENTS
任务:系统实现的逆向工程
【知识目标】
掌握源代码转换 理解软件再工程、逆向工程
【能力目标】
能准确分析源程序,进行系统实现逆向
从软件重用方法学来说,如何开发可
重用软件和如何构造采用可重用软件的
系统体系结构是两个最关键问题。在本
引例描述
单元里,我们通过对“用户登录模块” 这段代码的逆向工程来理解如何最大限 度地重用既存系统的各种资源。01任务系统实现的逆向 工程
• 对Java Web网站项目中常见的“用户登录模块”进行逆向
工程,并从中抽取信息来记录它的结构和功能。
• 9.1 逆向工程
• 9.1.1 逆向分析 • 9.1.2 代码级逆向
• 9.1.3 软件再工程
• 计算机领域的逆向工程一般分为两种
代码级的逆向工程是指通过分析来推导出具体的实现方法。比如你看到别人写的 某个exe程序能够做出某种漂亮的动画效果,你通过反汇编、反编译和动态跟踪等 方法,分析出其动画效果的实现过程。 系统级的逆向工程是以复原软件的描述和设计为目标的软件分析过程。程序本身 经过逆向工程过程并无变化。软件源程序代码总是能得到的,用它作为逆向工程过 程的输入推倒出设计,并且文档化,逆向软件工程的目的是使软件得以维护。
• 对“饮料销售机类”的部分源码进行逆向工程
《软件工程与UML》期末试题及答案

软件工程与UML建模复习题B一:单选题1.是在系统之外,透过系统边界与系统进行有意义交互的任何事物A).相关系统B).Use Case C).Class D).Actor2.软件工程是以为核心A).过程B).面向对象C).软件开发D).质量3.“系统应具有很高的可靠性,使用该产品的前3个月,系统不应该出现崩溃(数据不可恢复)的现象”,这属于A).功能性需求B).客观需求C).主观需求D).非功能性需求4.“系统每天晚上自动生成进货报表”,Actor是:A).系统B).其它系统C).时间D).报表审阅者5.数据流程图是一个分层的概念模型,分三个层次:,分别描述系统的不同特征A).总体图、二级图、三级图B).总体图、二级图、细节图C).总体图、零级图、细节图D).总体图、次级图、细节图6.正式运行系统后能够产生的收益被称为A).直接效益B).运营效益C).最佳效益D).启动效益7.“以相对短的时间和相对低的成本来确定给定的问题在其约束条件内是否有解、有几种解以及哪个是最佳解”,这指的是软件开发过程中的A).问题定义B).可行性研究C).需求分析D).设计8.在处理过程定义中,有时存在多重嵌套的情况,对于复杂的条件组合问题,用自然语言往往不能直观、清楚地表述处理的过程,因此,常常使用方法。
A).数据字典B).判定表和判定树C).用例图D).螺旋模型9.设C(X)定义问题X的复杂性函数,E(X)定义解决问题X所需要工作量的函数,对于两个问题p1和p2,一般情况下如果C(p1)<C(p2) 则A).E(p1)>E(p2) B).C(p1+p2)=C(p1)+C(p2)C).E(p1+p2)>E(p1)+E(p2) D).E(p1+p2)<E(p1)+E(p2)A).用例图B).类图C).数据流程图D).顺序图11.模块尺寸太大时,应A).分解以提高内聚B).分解以提高耦合C).合并以提高内聚D).分解以降低内聚12. 是指有定义完备接口的、明确规定了上下文以来关系的合成单元,它可以被第三方开发、并且能够被独立地部署,具有自包含的属性,其内部构造和特征不可见。
软件工程 第5章--UML

UML的定义
UML定义有两个主要组成部分:语义和表示法。 语义用自然语言描述,表示法定义了UML的可 视化标准表示符号,这决定了UML是一种可视 化的建模语言。 在语义上,模型是元模型的实例。UML定义给 出了语法结构的精确定义。 使用UML时,要从不同的角度观察系统,为此 定义了概念“视图(View)‖。视图是对系统的模 型在某方面的投影,注重于系统的某个方面。
独立于过程
系统建模语言,独立于开发过程。
9
容易掌握使用 概念明确,建模表示法简洁明了,图形结 构清晰,容易掌握使用。 着重学习三个方面的主要内容: (1) UML的基本模型元素 (2) 组织模型元素的规则 (3) UML语言的公共机制 与程序设计语言的关系 用Java,C++ 等编程语言可实现一个系统。 一些CASE工具可以根据 UML所建立的系 统模型来产生Java、C++ 等代码框架。
31
UML事物 — 注释事物
11) Note(注释)
依附于一个元素或一组元素之上,对其进
行约束或解释的简单符号。没有语义影响。
See policy8-5-96.doc for details about these algorithms.
CashAccount presentValue()
32
15
UML定义 9 种图,表达UML中的 5 种视图,各 视图在静态和动态方面表示系统模型。
结构 视图 静态 方面
动态 方面
行为 视图 同左
实现 视图 构件图
环境 视图 部署图
同左
用例 视图 用例图
同左
类图 对象图
顺序图 同左 顺序图 合作图 (注重 合作图 状态图 进程、 状态图 活动图 线程) 活动图
软件工程中的UML建模和设计模式

软件工程中的UML建模和设计模式在软件工程领域中,UML(统一建模语言)建模和设计模式是两个重要的概念。
UML建模是一种用于描述、设计和分析软件系统的标准化语言,而设计模式则是一种被广泛应用的解决软件设计问题的经验总结和最佳实践。
UML建模是软件开发过程中必不可少的一环。
它提供了一种通用的语言和符号,使得开发团队能够更好地理解和沟通软件系统的结构和行为。
UML建模包括用例图、类图、时序图等多种图形表示方式,每种图形都有其特定的用途和表达能力。
通过使用UML建模,开发团队可以更好地理解用户需求,设计合理的软件架构,并将其转化为可执行的代码。
设计模式是一种被广泛应用的解决软件设计问题的经验总结和最佳实践。
它们是在实际开发中被证明有效的解决方案,可以帮助开发人员避免重复造轮子,提高代码的可维护性和可扩展性。
设计模式包括创建型模式、结构型模式和行为型模式三大类。
创建型模式用于创建对象,结构型模式用于描述对象之间的关系,行为型模式用于描述对象之间的交互和通信方式。
常见的设计模式有单例模式、工厂模式、观察者模式等。
UML建模和设计模式在软件工程中的应用是相辅相成的。
UML建模提供了一种描述和设计软件系统的通用语言,而设计模式则提供了一种解决软件设计问题的方法。
通过使用UML建模,开发团队可以更好地理解和沟通软件系统的结构和行为,而设计模式则可以帮助开发人员遵循一种经过验证的最佳实践,提高代码的质量和可维护性。
举个例子来说,假设我们正在开发一个电子商务网站。
通过使用UML建模,我们可以绘制用例图来描述用户和系统之间的交互,类图来描述系统中的各个类和它们之间的关系,时序图来描述用户操作和系统响应的时序关系。
这些图形可以帮助开发团队更好地理解用户需求,并将其转化为可执行的代码。
在设计阶段,我们可以运用设计模式来解决一些常见的软件设计问题。
比如,我们可以使用单例模式来确保系统中只有一个购物车实例,使用工厂模式来创建不同类型的商品对象,使用观察者模式来实现用户对商品的关注和通知功能。
UML与软件建模实验报告

UML与软件建模实验报告姓名:孙治民专业:计算机应用1201学号:20127542指导老师:李绘卓目录实验一:用例建模 (3)实验2 分析建模 (6)实验3 设计建模(1) (9)实验4 设计建模(2) (11)用例附件: (13)内容:用例建模、分析建模、设计建模(1)、设计建模(2)实验一:用例建模[ 实验目的] ·掌握客户需求分析的方法和步骤·了解以用例驱动的软件开发方法·识别并编写用例·掌握用Rose 进行用例建模的具体方法和步骤[ 实验内容] 要求学生根据周围的实际情况,自选一个小型应用项目,分析业务需求,识别并编写用例、绘制用例图以理解系统需求。
亦可采用教师指定的“企业综合信息管理系统”中的“进销存管理子系统”[ 实验原理和步骤] 建模原理:(1) 需求获取。
以任务和客户为中心,通过会议、面谈等手段对客户需求进行调研,获得系统目标、范围和功能要求的初步说明。
(2) 用例分析。
确定用例,同时采用分层思想,对用例的层次级别进行划分(高层用例、子系统级、用户目标级)(3)用例描述。
分层绘制用例图,撰写用例的文字描述(采用单栏格式)。
步骤:(1)需求获取。
自选题目,与相关客户、领域专家等反复商讨,获得系统目标、范围和功能要求的初步说明。
(也可采用教师指定的题目:“企业综合信息管理系统”中的“进销存管理子系统”,但要仔细研读“企业现状”、“系统目标、范围和功能要求”等文字说明)。
(2)用例分析。
确定系统范围和边界、确定参与者、确定用例。
(3)用例描述。
分层绘制用例图、描述用例。
画图原理:采用Rose 软件进行用例建模必须建立在完好的系统用例分析基础之上.只有做好系统用例分析,系统用例建模才能这到预期的效果。
步骤:(1)分层绘制用例图,每层采用“包”进行管理。
(2)以“企业综合信息管理系统” -> “进销存管理”子系统-> “销售管理”-> “合同管理” ->“收款单处理”为主线,完成附录2 中的操作过程(亦可选择“企业综合信息管理系统” -> “进销存管理”子系统-> “库存管理” -> “原材料出库” ->“领料单处理”主线)[ 实验结果][ 实验总结] ①各层用例图之间相互关联,对用例图画法和建立要清楚的熟悉操作信息流程,否则很容易搞混;②用例图的画法步骤不是很熟悉,对工具的使用陌生,不能正确的画出和表达用例,缺乏实践。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
适用性
当创建复杂对象的算法应该独立于该对象的 组成部分以及它们的装配方式时。
当构造过程必须允许被构造的对象有不同的 表示时。 当你要强调一系列相关的产品对象的设计以 便进行联合使用时。
当你提供一个产品类库,而只想显示它们的 接口而不是实现时。。
设计模式
创建型
4、Builder(建造者)
— 7—
建造者模式的实现
适用性
你想使用一个已经存在的类,而它的接口不 符合你的需求。
你想创建一个可以复用的类,该类可以与其 他不相关的类或不可预见的类(即那些接口 可能不一定兼容的类)协同工作。
(仅适用于对象Adapter )你想使用一些已 经存在的子类,但是不可能对每一个都进行 子类化以匹配它们的接口。对象适配器可以 适配它的父类接口。
设计模式之禅
演讲人:唐有炜
概览
前言
概览
阐述为什么要使用设计 模式,他能解决什么问 题,不能解决什么问题 设计模式适用场合以及 最佳实践,避免设计模 式的滥用和误用
— 2—
设计模式解决的痛点
最佳实践
02 01
何为设计模式
了解什么是设计模式, 他出现的背景
04 03
23种设计模式分类概览
对23种经典设计模式 进行分析,体会设计模 式的内涵
设计模式
创建型
3、Abstract Factory(抽象工厂)
— 7—
抽象工厂模式的实现
/developer_zhang/article/details/19619927
设计模式
创建型
4、Builder(建造者)
— 7—
建造者模式的UML类图
要点
意图:
将一个复杂对象的构建与它的表示分离,使 得同样的构建过程可以创建不同的表示。
设计模式
创建型
2、Factory Method(工厂方法)
— 7—
工厂方法模式的实现
/xiaofeixiang/p/4712973.html /developer_zhang/article/details/19609225
4
何为设计模式
背景
没有设计模式之前软件面临的问题-软件危机
— 3—
软件还没完成,预算就没了?囧!
1
项目运行超出预算
怎么又有这么多Bug?
3
2
软件质量低落
明天能交付吗?
项目运行超过时间
5
项目无法管理,且代码 难以维护
4
软件通常不符合需求
我要求的不是这样!
这尼玛代码谁写的,改起 来真蛋疼?
何为设计模式
行为型
8. Composite(组合) 9. Decorator(装饰) 10. Facade(外观) 11. Flyweight(享元) 12. Proxy(代理)
13. Interpreter(解释器 ) 14. Template Method( 模板方法) 15. Chain of Responsibility(责任链 ) 16. Command(命令)
设计模式
创建型
2、Factory Method(工厂方法)
— 7—
要点 工厂方法模式的UML类图
意图:
定义一个用于创建对象的接口,让子类决定 实例化哪一个类。Factory Method 使一个 类的实例化延迟到其子类。
适用性
当一个类不知道它所必须创建的对象的类的 时候。 当一个类希望由它的子类来指定它所创建的 对象的时候。 当类将创建对象的职责委托给多个帮助子类 中的某一个,并且你希望将哪一个帮助子类 是代理者这一信息局部化的时候。
17. Iterator( 迭代器) 18. Mediator (中介者) 19. Memento (备忘录) 20. Observer (观察者) 21. State(状 态) 22. Strategy (策略) 23. Visitor( 访问者)
设计模式
创建型
1、Singleton(单例模式) //第二种写法 @implementation Singleton static Singleton sharedInstance = nil; + (id) sharedInstance { @synchronized(self) { if (!sharedInstance) { sharedInstance = [[self alloc] init]; } }
设计模式的出现
软件设计模式是在面向对象的系统设计过程中反复出现的问题解决方案。这个术语是在1990年代由Erich Gamma 等人从建筑设计领域引入到计算机科学中来的。这个术语的含义目前还存有争议。设计模式通常描述了一组相互紧 密作用的类与对象。设计模式提供一种讨论软件设计的公共语言,使得熟练设计者的设计经验可以被初学者和其他 设计者掌握。设计模式还为软件重构提供了目标。 上面是关于设计模式的普遍定义。设计模式是与语言无关的一套针对特定上下文的特定问题的解决方案,这种 解决方案被抽象化、模版化,就是设计模式。 关于这个Apple 的 Cocoa Fundamentals Guide有这么一句话: [Design Pattern is] a solution to a problem in a context.
3ห้องสมุดไป่ตู้
2 4
设计模式解决 的痛点
概念
设计模式解决的痛点
— 3—
设计模式六大原则
设计模式就是一套经过理论 和实践验证的可行的符合软 3 件工程思想的解决方案。 4
1
设计模式解决 的痛点
概念
设计模式6大原则
— 5—
单一职责原则
一个类应该只有一 个发生变化的原因 。
里氏代换原则
子类应该可以替换任何基 类能够出现的地方,并且 经过替换以后,代码还能 正常工作。
1
色。
(2)迭代式模型 (3)快速原型模型 所以,可以看出只要系统分析和设计到位了,写代码只是水到渠成的。
3
2
2、为什么要搞这么复杂? 有这种想法的人,要么是新手,要么没有做过大项目。其实软件的维护周期在一定程度上要远远大于开发周期 。一个好的优美的、可扩展架构往往可以节省很多维护成本,让程序更健壮。这点,越到后来,做的越多,体会会 越加深刻。 一旦到这个时候,你会发现,这些架构不是让软件复杂,想法,他们的目的就是让软件优美、简洁、健壮。
设计模式
分析
设计模式分类
— 6—
创建型
结构型
1. Singleton(单例) 2. FactoryMethod(工厂 方法) 3. Abstract Factory(抽 象工厂) 4. Builder(建造者) 5. Prototype(原型)
6. Adapter Class/Object (适配器) 7. Bridge( 桥接)
为了避免创建一个与产品类层次平行的工厂 类层次时;或者
当一个类的实例只能有几个不同状态组合中 的一种时。建立相应数目的原型并克隆它们 可能比每次用合适的状态手工实例化该类更 方便一些。
设计模式
创建型
5、Prototype(原型)
— 7—
原型模式的实现
/developer_zhang/article/details/9173015
何为设计模式
引言
几个疑问
— 3—
1、一个软件(或者系统)真正的生命周期是什么样的? 可能对于刚开始接触软件开发或者对这行了解不深的人,会认为,软件开发,不就是写代码吗? 错?大错特特错。在真正的正规流程中,写代码只不过是不到1/4的工作。真正的软件声明周期是这样的: (1)瀑布式模型 需求分析->软件设计->程序编码->软件测试->运行维护 想对应的职位:需求分析师、架构师、程序员(软件工程师)、软件测试员、系统运维 这些都是对应非常规范的大公司,小公司,可能压根没这么多步骤,有时候可能不自觉自己会担任多个角
— 7—
桥接模式的UML类图
要点
意图:
将抽象部分与它的实现部分分离,使它们都 可以独立地变化。
适用性
你不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如这种情况可能是 因为,在程序运行时刻实现部分应可以被选择或者切换。 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。这时Bridge 模式 使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。 对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。 (C++)你想对客户完全隐藏抽象的实现部分。在C++中,类的表示在类接口中是可 见的。 有许多类要生成。这样一种类层次结构说明你必须将一个对象分解成两个部分。 Rumbaugh 称这种类层次结构为“嵌套的普化”(nested generalizations )。 你想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一 点。一个简单的例子便是Coplien 的String 类[ Cop92 ],在这个类中多个对象可以共享 同一个字符串表示(StringRep )。
/eagle927183/p/3462439.html
设计模式
结构型
6、Adapter Class/Object(适配器)
— 7—
适配器模式的UML类图
要点
意图:
将一个类的接口转换成客户希望的另外一个 接口。Adapter 模式使得原本由于接口不兼 容而不能一起工作的那些类可以一起工作。
— 4—
意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 适用性: 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能 使用一个扩展的实例时。
UML类图
}
+ (id) Singleton//第一种写法 { static dispatch_once_t onceToken; static Singleton * sharedInstance; dispatch_once(&onceToken, ^{ sharedInstance = [[self alloc] init]; }); return sharedInstance; }