C++程序设计 第八章 设计模式

合集下载

课件谭浩强C++程序设计第8章(带特殊条款)

课件谭浩强C++程序设计第8章(带特殊条款)

课件谭浩强C++程序设计第8章(带特殊条款)课件:谭浩强《C++程序设计》第8章概述:第8章主要介绍了C++中的继承和多态性。

继承是面向对象编程中的一种重要特性,它允许我们创建一个新的类(称为派生类),该类继承另一个类(称为基类)的属性和方法。

多态性则允许我们使用一个接口来定义多种不同类型的对象的行为。

本章将详细介绍这两个概念,并通过实例来演示它们的应用。

一、继承的概念与定义1.继承的基本概念继承是面向对象编程中的一种机制,允许我们创建一个新的类(派生类),该类继承另一个类(基类)的属性和方法。

派生类可以添加新的属性和方法,也可以覆盖基类的方法。

2.继承的定义在C++中,继承通过使用冒号和访问权限关键字(如public、protected和private)来定义。

例如,如果我们要创建一个派生类Student,它继承自基类Person,可以如下定义:cppclassPerson{public:stringname;intage;};classStudent:publicPerson{public:stringstudentId;};二、继承的访问权限1.公共继承(public)当一个类使用public关键字进行继承时,基类的public成员在派生类中仍然是public,protected成员在派生类中仍然是protected。

2.保护继承(protected)当一个类使用protected关键字进行继承时,基类的public和protected成员在派生类中都变为protected。

3.私有继承(private)当一个类使用private关键字进行继承时,基类的public和protected成员在派生类中都变为private。

三、继承中的构造函数和析构函数1.构造函数的继承在派生类中,构造函数会调用基类的构造函数,然后执行派生类自己的构造函数。

如果基类有默认构造函数,则可以省略基类构造函数的调用。

c课程设计设计模式

c课程设计设计模式

c 课程设计设计模式一、教学目标本课程旨在让学生掌握设计模式的基本概念、原则和常见的设计模式,培养学生运用设计模式解决实际问题的能力。

通过本课程的学习,学生将能够:1.理解设计模式的基本概念、原则和分类;2.熟悉常见的设计模式及其应用场景;3.能够运用设计模式解决实际问题,提高代码的可维护性和可扩展性。

二、教学内容本课程的教学内容主要包括设计模式的基本概念、原则、常见的设计模式及其应用。

具体安排如下:1.设计模式的基本概念:介绍设计模式的定义、目的和分类;2.设计模式的原则:讲解设计模式遵循的原则,如SOLID原则;3.常见的设计模式:介绍常见的设计模式,如单例模式、工厂模式、观察者模式等,并分析其应用场景;4.设计模式的运用:通过实际案例,讲解如何运用设计模式解决实际问题。

三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法,如讲授法、讨论法、案例分析法等。

具体如下:1.讲授法:讲解设计模式的基本概念、原则和常见的设计模式;2.讨论法:学生分组讨论设计模式的优缺点及应用场景;3.案例分析法:分析实际案例,引导学生学会运用设计模式解决实际问题。

四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:选用权威、实用的设计模式教材;2.参考书:提供设计模式相关的参考书籍,以便学生课后深入研究;3.多媒体资料:制作精美的PPT,便于学生理解和记忆;4.实验设备:提供计算机实验室,便于学生实践和实验。

五、教学评估本课程的教学评估将采用多元化的评价方式,包括平时表现、作业、考试等,以全面、客观、公正地评估学生的学习成果。

具体评估方式如下:1.平时表现:通过课堂参与、提问、小组讨论等环节,评价学生的学习态度和课堂表现;2.作业:布置适量的课后作业,检查学生对知识点的理解和应用能力;3.考试:设置期中考试和期末考试,以检验学生对本课程知识的掌握程度。

11803_谭浩强《C程序设计》课件第8章PPT课件

11803_谭浩强《C程序设计》课件第8章PPT课件
03
如何处理文件读写错误?
2024/1/27
04
在进行文件读写操作时,需要判断返回值是否成功,如果 失败则需要使用perror()等函数输出错误信息。
05
如何实现文件的追加写入?
06
在使用fopen()函数打开文件时,使用追加模式"a"或"a+" 可以实现文件的追加写入。
29
拓展延伸:高级文件操作技术探讨
文本文件的读写操作
使用fscanf()、fprintf()等函数进行文 本文件的读写操作。
2024/1/27
文本文件的打开与关闭
使用fopen()函数打开文本文件,使 用fclose()函数关闭文本文件。
文本文件的定位与修改
使用fseek()、ftell()等函数进行文本 文件的定位与修改。
24
二进制文件操作实例
学习要求
认真听讲,理解文件操作的基本概念 和原理;多动手实践,通过编写程序 加深对文件操作的理解和掌握;注意 细节和规范,养成良好的编程习惯。
6
02
文件类型与指针
2024/1/27
7
标准文件类型
2024/1/27
文本文件
存储字符数据,每个字符对应一个ASCII码,Байду номын сангаас于阅读和编辑。
二进制文件
存储二进制数据,适用于非字符数据或需要高效存储和读取的场 景。
write
将指定的数据块写入到指定的文件描述符中(低级I/O函数)。
2024/1/27
14
04
随机访问文件内容
2024/1/27
15
文件定位函数
01
fseek()
用于设置文件位置指针,可以实 现在文件中的任意位置进行读写 操作。

谭浩强《C程序设计》课件第8章-讲义

谭浩强《C程序设计》课件第8章-讲义
在C++中,所谓多态性(polymorphism)是指: 由继 承而产生的相关的不同的类,其对象对同一消息会 作出不同的响应。多态性是面向对象程序设计的一 个重要特征,能增加程序的灵活性。
8.1.2 面向对象程序设计的特点
传统的面向过程程序设计是围绕功能进行的,用一 个函数实现一个功能。所有的数据都是公用的,一 个函数可以使用任何一组数据,而一组数据又能被 多个函数所使用(见图8.3)。
图8.3
面向对象程序设计采取的是另外一种思路。它面对 的是一个个对象。实际上,每一组数据都是有特定 的用途的,是某种操作的对象。也就是说,一组操 作调用一组数据。
程序设计者的任务包括两个方面: 一是设计所需的
各种类和对象,即决定把哪些数据和操作封装在一 起;二是考虑怎样向有关对象发送消息,以完成所 需的任务。这时他如同一个总调度,不断地向各个 对象发出命令,让这些对象活动起来(或者说激活这 些对象),完成自己职责范围内的工作。各个对象的 操作完成了,整体任务也就完成了。显然,对一个 大型任务来说,面向对象程序设计方法是十分有效 的,它能大大降低程序设计人员的工作难度,减少 出错机会。
精品
谭浩强《C程序设计》课 第8章
第8章 类和对象
8.1 面向对象程序设计方法概述 8.2 类的声明和对象的定义 8.3 类的成员函数 8.4 对象成员的引用 8.5 类的封装性和信息隐蔽 8.6 类和对象的简单应用举例
8.1 面向对象程序设计方法概述
到目前为止,我们介绍的是C++在面向过程的程序设 计中的应用。对于规模比较小的程序,编程者可以 直接编写出一个面向过程的程序,详细地描述每一 瞬时的数据结构及对其的操作过程。但是当程序规 模较大时,就显得力不从心了。C++就是为了解决编 写大程序过程中的困难而产生的。

课件谭浩强C程序设计第8章

课件谭浩强C程序设计第8章

指针是C语言中一种特殊的数据类型,用于存储内存地址。

通过指针,可以间接访问和操作内存中的数据。

指针提供了一种灵活且高效的数据访问方式,是C语言的重要特性之一。

01指针变量用于存储内存地址,其类型指明了所指向数据的类型。

02定义指针变量时需指定类型,如int *p表示p是一个指向整型数据的指针。

03指针变量可以进行赋值、比较、算术运算等操作。

数组名是一个常量指针,指向数组的首个元素。

指针与数组在内存中的表示方式相似,因此可以相互转换。

通过指针可以遍历数组,访问数组中的每个元素。

使用指针访问数组可以提高程序的灵活性和效率。

指针与数组03可以对指针进行加减整数操作,以改变指针所指向的内存地址。

例如,`ptr` 或`ptr--` 分别使指针向后或向前移动一个元素的位置。

指针与整数的加减运算通过使用间接引用运算符`*`,可以访问指针所指向的值。

例如,`*ptr` 表示获取`ptr` 所指向的值。

指针的间接引用可以对两个指针进行相减操作,得到它们之间相差的元素个数。

例如,`ptr2 -ptr1` 返回两个指针之间相差的元素个数。

指针的算术比较指针的比较可以使用关系运算符`==`、`!=`、`<`、`>`、`<=`、`>=`对指针进行比较,判断它们是否相等或相对大小。

空指针的判断可以使用`NULL`或`0`来表示空指针,通过比较可以判断一个指针是否为空。

指针的赋值可以使用赋值运算符`=` 将一个指针的值赋给另一个指针,使它们指向相同的内存地址。

例如,`ptr2 = ptr1;`。

指针的初始化在定义指针变量时,可以对其进行初始化,使其指向一个特定的内存地址或空值。

例如,`int *ptr = NULL;` 或`int *ptr = &var;`。

指针的复制可以使用赋值运算符将一个指针的值复制给另一个指针,使它们具有相同的值。

例如,`ptr2 = ptr1;` 之后,`ptr2` 和`ptr1` 将指向相同的内存地址。

C面向对象程序设计及实践教程第八章PPT课件

C面向对象程序设计及实践教程第八章PPT课件
1.窗体和控件
u 在面向对象的程序设计中,窗体本身就是一个对象。在C#编 程中,窗体是System.Windows.Forms命名空间的Form类的 示例。窗体有自己特有的属性、方法和事件。窗体时各类控 件的载体,文本框、命令按钮和标签等控件都通过窗体来呈 现。
u 控件是窗体上的对象,是构成用户界面的基本元素,是用户 与应用程序实现交互的媒介,是Windows窗体实现界面友好 的重要工具。常见的控件有命令按钮、复选框、组合框、标 签、图片控件、文本框等等。在Visual Studio窗体设计模式 中,控件被分类置于工具箱中,包括通用控件、容器类控件 、菜单和工具栏控件等等。
法 n 掌握MDI窗体创建方法
3
目录
n 8.1 Windows应用程序的基本结构 n 8.2 标签(Label)控件 n 8.3 文本框(TextBox)控件 n 8.4 富文本框(RichTextBox)控件 n 8.5 按钮(Button)控件 n 8.6 单选按钮(RadioButton)和复选框(
u Form1.Designer.cs包含开发者在设计Form1窗体 时拖拽控件或修改控件属性时系统自动生成的代码 。
9
Windows应用程序项目组成
n Properties部分包含文件AssemblyInfo.cs、 Resources.Designer.cs、Resources.resx、 Settings.Designer.cs和Settings.settings。
u AssemblyInfo.css是程序集代码文件,用于保存程 序集信息;
u Resources.Designer.cs是项目资源文件; u Resources.resx用于存放资源文件; u Settings.Designer.cs和Settings.settings用于存储

c#程序设计教程-第8章PPT课件

c#程序设计教程-第8章PPT课件
private void button1_Click(object sender, EventArgs e) {
textBox1.Text = "这是我的第一个ActiveX控件!"; }
——在编写代码的过程中,也可以像调试窗体应用程序那样调试 控件程序,也可以运行控件程序,以观看其显示的效果。
8.1 一个简单ActiveX控件的开发 C#程序设计教程——蒙祖强编著
第8章
ActiveX控件和自定 义组件开发
本章内容
8.1 一个简单ActiveX控件的开发 8.2 ActiveX控件 8.3 自定义组件
8.1 一个简单ActiveX控件的开发 C#程序设计教程——蒙祖强编著
8.1.1 创建ActiveX控件程序
ActiveX控件可以简单理解为能够实现特定功能的“成品”控件。
(2)单击【确定】按钮,创建名为MyFirstActiveX的ActiveX控 件 程 序 。 然 后 在 打 开 的 界 面 中 添 加 一 个 Buttion 控 件 和 一 个 TextBox控件,并进行适当的设置:
8.1 一个简单ActiveX控件的开发 C#程序设计教程——蒙祖强编著
8.1.1 创建ActiveX控件程序 (3)在设计界面中双击【我的控件】按钮,进入该按钮的事件 处理函数,并编写相应代码,结果如下:
ActiveX控件可以用各种编程语言来开发,如C、C++,也包 括.NET中的C#、等。ActiveX控件通常以dll或ocx文件的形 式存在,它不能独立运行,必须依赖于其他程序,相应的这些程序 称为ActiveX控件宿主程序。
宿主程序在使用控件和组件时,不需要编译,只需要按照既定的格 式说明进行调用即可。这与使用函数或类不同。在使用函数或类时, 需要将它们的代码加入到程序中相应的位置,并在编译后才能调用。

C+程序设计课件第8章

C+程序设计课件第8章

3
参数传递
了解如何将函数指针作为参数传递给其他函数。
指针和结构体
学习如何在结构体中使用指针。掌握指针和结构体的关系,以及如何通过指针访问和修改结构体的成员。
结构体指针
了解如何声明和使用结构体 指针。
访问和修改
通过指针访问和修改结构体 的成员。
高级技巧
探索在结构体中使用指针的 高级技巧和应用。
深入了解如何使用指针查找和比 较字符串。
字符串艺术
探索使用指针进行字符串处理的 高级技巧和应用。
函数指针和回调函数
介绍函数指针和回调函数的概念和用法。学习如何声明、定义和使用函数指针,以及如何将函数指针作 为参数传递给其他函数。
1
函数指针
深入研究函数指针的概念和用法。
2
回调函数
探索回调函数的概念和实际应用。
1
动态内存分配
探索动态内存分配的概念和原理。
2
new和delete
学习使用new和delete运算符进行动态内存的分配和释放。
3
内存泄漏
了解内存泄漏研究常量指针和指针常量的概念和用法。了解指针和常量之间的关系,以及如何声明和使用 常量指针和指针常量。
常量指针
学习如何声明和使用常量指针。
指针常量
了解如何声明和使用指针常量。
关系和应用
深入探讨指针和常量之间的关系和应用。
指针和C字符串
研究指针在C字符串操作中的作用。掌握使用指针处理字符串的常见技巧和方法,如字符串的复制、连接、查 找和比较。
字符串操作
学习使用指针进行字符串操作的 基本技巧和方法。
查找和比较
C+程序设计课件第8章
深入学习C++指针的基本概念,包括指针和数组、指针和函数,以及常见的 指针应用,为进一步的学习打下坚实的基础。

C程序设计 谭浩强著 精品课件 第8章 函数(4)

C程序设计 谭浩强著 精品课件  第8章 函数(4)

C 程序设计
第八章 函数
6
例 考察静态局部变量的值。 #include <stdio.h> void main() { int fun(int); int a=2,i; for(i=0;i<3;i++) printf("%d",fun(a)); } fun fun(a) { auto int b=0; static c=3; main b=b+1; c=c+1; return(a+b+c); }
C 程序设计
栈顶
n:
main运行状态及返回地址 i:
f:
OS运行状态及返回地址
栈底
第八章 函数
10
8.9.4 register变量 一般情况下,变量(包括静态存储方式和动态存储 方式)的值是存放在内存中的。当程序中用到哪一 个变量的值时,由控制器发出指令将内存中该变量 的值送到运算器中。 经过运算器进行运算,如果 需要存数,再从运算器将数据送到内存存放。
C 程序设计
第八章 函数
17
一般为了叙述方便,把建立存储空间的声明称为定 义,而把不需要建立存储空间的声明称为声明。 例如: void main() { extern a; /*是声明不是定义。声明a是一 个已定义的外部变量*/ … } int a;
C 程序设计
第八章 函数
18
8.9.8 存储类别小结
C 程序设计 第八章 函数
C 程序设计
栈顶
b: a:
main运行状态及返回地址
i: a: c:
OS运行状态及返回地址
栈底
第八章 函数
7
对静态局部变量的说明: ① 静态局部变量属于静态存储类别,在静态存储区内 分配存储单元。在程序整个运行期间都不释放。而 自动变量(即动态局部变量)属于动态存储类别, 占动态存储区空间而不占静态存储区空间,函数调 用结束后即释放。 ② 对静态局部变量是在编译时赋初值的,即只赋初值 一次,在程序运行时它已有初值。以后每次调用函 数时不再重新赋初值而只是保留上次函数调用结束 时的值。而对自动变量赋初值,不是在编译时进行 的,而是在函数调用时进行,每调用一次函数重新 给一次初值,相当于执行一次赋值语句。

基于8位单片机的C语言程序设计(第二版) 第八章PPT课件

基于8位单片机的C语言程序设计(第二版)  第八章PPT课件
第八章 MCS-51单片机的中断系统
整体概述
概况一
点击此处输入相关文本内容 点击此处输入相关文本内容
概况二
点击此处输入相关文本内容 点击此处输入相关文本内容
概况三
点击此处输入相关文本内容 点击此处输入相关文本内容
❖ 【本章知识架构】
12.08.2020
3
❖ 【本章教学目标和要求】
❖ 了解中断的基本概念,包括中断请求、中断允许和屏蔽 ❖ 熟悉MCS-51单片机的中断源、中断请求 ❖ 熟悉MCS-51单片机的中断优先级、中断允许和屏蔽、中断
响应 ❖ 熟悉MCS-51单片机的中断程序编写 ❖ 读懂MCS-51单片机的中断实例程序
12.08.2020
4
8.1中断的基本概念
❖ 中断是计算机中很重要的一个概念,中断系统也是
MCS-51单片机的重要组成部分。实时控制、故障 处理往往通过中断来实现,计算机与外部设备之间
的信息传递常常采用中断处理方式。什么是中断?
❖ 1. 外部中断INT0和INT1
❖ 外部中断源INT0和INT1的中断请求信号通过MCS-
51单片机的并口引脚P3.2和P3.3的输入,主要用于
自动控制实时处理、单片机掉电和设备故障处理。
12.08.2020
10
❖ 外部中断请求INT0和INT1有两种触发方式:电平触 发及跳变(边沿)触发。这两种触发方式可以通过 特殊功能寄存器TCON来选择。特殊功能寄存器 TCON除在定时计数器中使用外(其高4位用于定时 计数器控制,后面介绍),低4位用于外部中断控 制,形式如图8-1所示。
12.08为.202高0 电平。
13
❖ 2.定时/计数器T0和T1中断
❖ 当定时/计数器T0或T1溢出时,由硬件置TF0(或 TF1)为“1”。向CPU发送中断请求,当CPU响应 中断后,将由硬件自动清除TF0(或TF1)。

C语言中的设计模式应用

C语言中的设计模式应用

C语言中的设计模式应用设计模式是软件开发中用来解决特定问题的重复性方案,它可以帮助程序员更好地组织和管理代码,提高代码的可维护性和可扩展性。

在C语言中,设计模式同样可以发挥作用,帮助开发者编写更加高效和健壮的程序。

下面我们来看一些C 语言中常用的设计模式及其应用。

首先,单例模式是一种常见的设计模式,它确保一个类只有一个实例,且提供一个全局访问点。

在C语言中,单例模式可以通过静态变量实现,保证只有一个实例被创建并且提供一个访问该实例的函数。

这在需要共享资源或控制某些全局状态时非常有用。

另外,工厂模式是一种用来创建对象的设计模式,它将对象的创建和使用分离,使得程序更易于扩展和维护。

在C语言中,工厂模式可以通过函数指针和结构体来实现,根据不同的参数选择不同的工厂函数来创建对象,这样可以灵活地添加新的对象类型而不影响原有代码。

此外,观察者模式是一种行为模式,用来定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖对象都会得到通知并自动更新。

在C语言中,观察者模式可以通过回调函数实现,当观察对象状态改变时,调用所有注册的回调函数来通知观察者,这样可以实现对象间的解耦合。

除此之外,装饰器模式是一种结构型设计模式,用来动态扩展对象的功能而不改变其结构。

在C语言中,装饰器模式可以通过函数指针和结构体来实现,将原有的功能进行包装并添加额外的功能。

这样可以避免代码的重复和大量嵌套的if-else语句。

最后,策略模式是一种行为模式,用来定义一系列的算法,并将每个算法封装成一个独立的对象,使得它们可以互相替换。

在C语言中,策略模式可以通过函数指针和结构体来实现,将每个算法封装成一个函数对象,根据不同的需求选择不同的算法对象。

这样可以使得程序更加灵活和可扩展。

总的来说,设计模式是程序员解决问题的利器,它可以提高代码的可读性、可维护性和可扩展性。

在C语言中,设计模式同样可以发挥重要的作用,帮助开发者编写更加优秀的程序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

创建模式

Singleton(单例模式)


Factory (工厂模式)
Abstract Factory(抽象工厂) Builder(生成器) Prototype(原型)
The Factory Pattern (工厂模式)
学习问题

随着经济的全球化,一个软件可能要在全球销售。因此, 我们设计的软件应该能够通过简单的配置就可以适应不同 的国家。 本讲所学的知识将能提供一种有助于解决此问题的方法。

创建模式

Singleton(单例模式)


Factory (工厂)
Abstract Factory(抽象工厂) Builder(生成器) Prototype(原型)
The Singleton Pattern (单例模式)
学习问题

在许多场合,我们希望某个类只能有一 个实例。因为如果该类有多个实例同时 存在可能会导致一些问题的出现。如: 一个计算机系统可以有多台打印机,但 打印机管理器只能有一个运行,每台打 印机也只能有一个实例对象,以防止多 个打印作业同时使用一台打印机。 现在请大家思考,如何设计一个类 Printer,这个类仅能存在一个实例。
pizza->prepare(); pizza->bake(); pizza->cut(); pizza->box(); return pizza; }

怎么办呢?
再回忆我们前面提出的面向对象设计的原则 识别应用的变化部分,并将之与固定的部分相分离。 怎样区分变化的部分? 下面我们来看一个例子——Pizza店
orderPizza()中的一段代码-订做pizza
Pizza* orderPizza() { Pizza* pizza = new Pizza(); 真希望这是一个 抽象类或者接口, 可惜抽象类或接 口都不能被实例 化

单例模式的关键特征

参与者与协作者:客户对象只能通过getInstance()方法创 建单例类的实例。 效果:客户对象无需操心是否存在单例类的实例,实例化 有单例类自己控制。 实现:




一个引用单例对象的静态私有成员变量
一个公共静态方法,负责实现一次性的实例化并 返回对单例对象的引用 设置为保护或私有的构造方法

意义:
懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要。

学习方法:
只有通过实践去体验才能真正掌握。道可道,非常道。道不可言。 设计模式亦然如此。
什么是设计模式?

例子: mvc模式
MVC 模式效果
控制器1
控制器2
控制器3
设计模式的分类

分类一:模式完成什么样的工作?


创建型 : 与对象的创建有关 结构型: 处理类和对象的组合和结构 对象行为型: 类和对象怎么样交互,如果分配职 能的。
}

那么,是不是有另一种实例化一个对象的方法呢?
实例化一个对象
class MyClass { private: static MyClass* uniqueInstance; MyClass() {…} public: static MyClass* getInstance() { if (uniqueInstance==null) uniqueInstance =new MyClass(); return uniqueInstance } //其他成员声明 }
pizza->prepare();
pizza->bake(); pizza->cut(); pizza->box(); return pizza; } //… 而且,我们有许多种pizza, 所以我们增加一些代码, 来确定合适的pizza种类, 然后进行制作。
}
修改后的代码
Pizza* orderPizza(string type) { Pizza* pizza=null; if (type == “cheese”){ pizza = new CheesePizza(); } else if (type == greek”){ pizza = new GreekPizza(); } else if (type == pepperoni”){ pizza = new PepperoniPizza(); } pizza->prepare(); pizza->bake(); pizza->cut(); pizza->box(); return pizza; }
设计模式
目录

什么是设计模式?


创建型模式
结构型模式 对象行为型模式
什么是设计模式?

Hale Waihona Puke 模式:描述在我们身边重复发生的问题,以及解决这些问题 的方案和核心内容。每个模式,通过一种可以让你无数次使 用这一解决方案、而不必再次重复同样工作的方式。 设计模式:设计模式(Design pattern)是一套被反复使用、 多数人知晓的、经过分类编目的、代码设计经验的总结。使 用设计模式是为了可重用代码、让代码更容易被他人理解、 保证代码可靠性。 设计模式产生于建筑学和人类学,设计模 式使代码编制真正工程化,设计模式是软件工程的基石,如 同大厦的一块块砖石一样。 设计模式4要素: 名称 :记录这个模式相关的问题和解决方案等。 问题的描述: 具体的问题的描述。 解决方案: 如何解决这类问题,包括设计涉及的组成成分, 已经这些部分的职责和相互关系。 效果 :模式应用的效果以及应用过程中应该权衡的问题。


什么是设计模式?

四人帮
设计模式四人组,GoF(“四人帮”,又称Gang of Four,即Erich Gamma, Richard Helm, Ralph Johnson & John Vlissides四人)的《设计模式》,原 名《Design Patterns: Elements of Reusable ObjectOriented Software》(1995年出版),第一次将设计 模式提升到理论高度,并将之规范化。该书提出了23 种基本设计模式。时至今日,在可复用面向对象软件 的发展过程中,新的设计模式仍然不断出现。

单例模式通用结构图
Singleton
-static uniqueInstance -otherVariable
-Singleton() +static getInstance() +otherMethods()
creates
单例模式通用结构图
进一步思考的问题

如何编写一个最多实例化指定个数(如2个)实例的类?
问题…

当你拥有一组相关的具体类时,你常 常被迫写出类似下面的代码:
Duck* duck; If (picnic) { duck=new MallardDuck(); } else if (hunting) { duck=new DecoyDuck(); } else if (inBathTub) { duck=new RubberDuck(); }


于是。。。
改!改!改!
Pizza* orderPizza(string type) { Pizza* pizza; if (type == “cheese”){ pizza = new CheesePizza(); } else if (type== “greek”){ pizza = new GreekPizza(); } else if (type == “pepperoni”){ pizza = new PepperoniPizza(); } else if (type == “veggie”){ pizza = new VeggiePizza(); }
设计模式的分类
目录

什么是设计模式?


创建型模式
结构型模式 对象行为型模式
创建模式
解决了一个系统中如何创建、组合和表示其中的对象。 类创建模式改变被实例化的类,对象创建模式改变具体 实例化的对象。 模式的封装性,整个系统关心的只是相应的接口: 把系统中使用哪些具体的类的信息封装起来 隐藏了系统中这些类是如何被创建和组合在一起的 细节 类别 Singleton(单例模式) Abstract Factory(抽象工厂) Builder(生成器) Factory Method (工厂方法) Prototype(原型)

p1和p2是两个不同的对象!
如何创建一个对象

你可不可以这样做?
class MyClass { private : MyClass() {…} … }
讨论:这个类能被实例化吗?new MyClass() 讨论:有没有对象可以调用构造方法MyClass()?

如何创建一个对象

下面的代码意味着什么?

类MyClass是不是只能有一个实例对象?
抽象一下
class LazySingleton { private: static MyClass* uniqueInstance; LazySingleton() {…} public: static MyClass getInstance() { if (uniqueInstance==null) uniqueInstance=new LazySingleton(); return uniqueInstance } //其他成员声明 }
类模式处理类与之类的关系,这个关系通过继承 关系建立,是静态的,在编译的时候就确定了 对象模式处理对象间的关系,这些关系时刻在变 化 比如:创建型类模式把创建的过程延迟到子类, (Factory Method),而创建型对象模式把创建 的过程交给其他的对象等
相关文档
最新文档