- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1-dotNet概述.ppt
设计模式(二) 原盛 目标 处理与对象聚集有关的问题 内容 合成模式(Composite) 迭代子模式(Iterator) 享元模式(Flyweight) 访问者模式(Visitor) 装饰模式(Decorator) 观察者模式(Observer) 合成模式(Composite) 概念 每一个组件或者对象都可以分成两种类型 单纯组件 合成组件:由单纯组件或者其他合成组件组成 把部分和整体的关系用树结构表示出来 使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待 合成模式(Composite) Demo 设计一个应用程序用来模拟Windows/Unix的文件系统 显示指定文件的大小 显示指定目录的大小 创建文件 创建目录 分析 目录和文件是文件系统的主要组成成分 目录可以由其他的目录或者文件组成 目录可以看成是树枝节点,就是那些还没有结束的节点 文件可以看成是树叶节点,就是那些已经终结的节点 合成模式(Composite) 设计方案一: 合成模式(Composite) 设计方案二 合成模式(Composite) 设计方案一和设计方案的区别 设计方案二使得客户端更不需要关心所需处理的组件的类别 设计方案二需要对某类增加对额外操作行为的处理 实现方案二的Demo 合成模式(Composite) 练习 背景知识 html语言中的frameset标签,frameset标签主要用来将一个web页分割成不同的部分以方便在每一个部分显示不同的网页,frame标签则用来在frameset标签中分割的某一部分指定要显示的网页,并且一个frameset标签可以被嵌套到另外一个frameset中。 一个使用frameset标签的html例子 合成模式(Composite) 合成模式(Composite) 练习 目标 设计两个类:FrameSet和Frame类,用这两个类分别独立的代替frameset和frame标签 在这些类上定义至少一个操作getSourceFiles(),该操作返回由FrameSet或者Frame对象所指定的要显示的HTML文件 迭代子模式(Iterator) 概念 迭代子模式:提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示 适用性 访问一个聚合对象的内容而无需暴露它的内部表示 支持对聚合对象的多种遍历 为遍历不同的聚合结构提供一个统一的接口(即, 支持多态迭代) 迭代子模式(Iterator) 内部迭代子 聚合对象自身提供了具有迭代功能的方法,客户端可以使用这个方法遍历访问聚合对象中的每个对象 这种迭代子对于每个聚合对象来说在任何时候都只能拥有一个 聚合对象自身需要维护迭代子相关的所有信息 迭代子模式(Iterator) Demo 有一个文本文件“stuinfo.txt”,这个文件中记录了学生的姓名、班级以及五次作业的上交情况 设计一个客户端,用来显示所有学生的基本信息 迭代子模式(Iterator) 设计方案 迭代子模式(Iterator) 外部迭代子 迭代功能和对象聚合进行隔离,在对象聚合中维持一个能够指向具体迭代子对象的引用变量 具体使用什么样的迭代子根据客户端的输入 在任何时候,一个对象聚合都可以拥有多个不同类型的迭代子 迭代子模式(Iterator) C#中的迭代子实现 属于外部迭代子的实现模式 例如: ArrayList类实现了IEnumerable接口,通过这个接口所定义的方法将返回一个实现了IEnumerator接口的具体迭代子 通过下面的代码示例我们可以看到一个对象聚合可以拥有分别不同的迭代子 迭代子模式(Iterator) 迭代子模式(Iterator) Demo 在上一个Demo的基础上,使用外部迭代子模式创建一个反向迭代子、过滤迭代子 迭代子模式(Iterator) 设计方案 练习 下面的XML文件记录了作者与书之间的信息 练习 在给定的XML文件的基础上,设计如下三个类: AuthorCollection:负责从XML文件中读取相应的数据,并且将这些数据有效的储存起来,该类承担的角色为容器 AuthorIterator:是一个外部迭代子,负责通过MoveNext方法可以从一个作者移动到另外一个作者,该类承担的角色为迭代子 BookIterator:是一个外部迭代子,负责返回指定作者的所有书,并且提供MoveNext等方法从一本书移动到另外一本书,该类承担的角色为迭代子 设计一个客户端,让这个客户端能够使用这两个迭代子,并且按照某种固定的格式显示这些信息 享元模式(Flyweight) 概念 每个对象的状态都可以分成如下两部分: 内部状态 这种状态独立于对象所在的上下文环境。也就是说对于给定的某个类的所有对象这种状态是一些公共信息,而且基本不会变
您可能关注的文档
最近下载
- 北师大版八年级上册数学 第5章 二元一次方程 问题解决策略:逐步确定 教案.docx VIP
- 一年级上册数学第一单元试卷.doc VIP
- 地震数据分析软件:SeisComP二次开发_地震监测系统部署与维护.docx VIP
- 小红书种草营销师模拟试题及答案.docx VIP
- 音乐人吉他课.pptx VIP
- 隧道紧急停车带专项施工方案 - 生产安全.docx VIP
- 北师版八年级上册数学精品教学课件 第五章 二元一次方程组 ☆问题解决策略_逐步确定 (2).ppt VIP
- 北师版八年级上册数学精品教学课件 第五章 二元一次方程组 ☆问题解决策略_逐步确定.ppt VIP
- 问题解决策略:逐步确定 2025-2026学年北师大版数学八年级上册.pptx VIP
- 音乐人吉他课.docx VIP
文档评论(0)