软件设计模式复习题.doc
《软件设计模式复习题.doc》由会员分享,可在线阅读,更多相关《软件设计模式复习题.doc(26页珍藏版)》请在咨信网上搜索。
1、软件设计模式复习题1、 熟悉每个设计模式的定义、模式UML图解、模式使用情形以及模式优缺点。2、 设计模式的两大主题是什么?3、 设计模式分成几大类?每大类各包含哪些模式?4、 为什么要使用设计模式?使用设计模式有哪些好处?5、 比较抽象工厂模式和工厂方法模式相似性和差异性。什么情况下使用抽象工厂模式?什么情形下使用工厂方法模式?6、 简述原型模式中浅层克隆和深度克隆的区别?分别给出代码说明。7、 模板方法和普通的实现类继承抽象类方式有何区别?8、 是比较和分析适配器模式和桥接模式之间的共性和差异性。9、 请用组合模式实现学校人事管理模式。10、 综合应用装饰模式、命令模式和状态模式实现工具条
2、命令按钮鼠标进入时高亮显示状态以及鼠标单击按钮后呈现凹陷状态,表明当前按钮为选中状态。11、 请阐述享元模式是如何节省系统内存的?试举例分析使用享元模式前后的内存节约之比。12、 使用解析器模式实现对学生成绩表的查询输入语句进行解析并执行查询,成绩表结构如下:学号姓名专业班级课程代码课程名称课程性质任课教师成绩13、 结合命令模式和备忘录模式实现程序的undo和redo功能。14、 试比较和分析中介者模式和观察者模式之间的相似性和差异性?两者是否能够相互转化?15、 模板方法和普通的抽象类继承有什么区别?16、 使用访问者模式对12题中的学生信息进行报到。1、 熟悉每个设计模式的定义、模式UM
3、L图解、模式使用情形以及模式优缺点。(见书)答: 单件模式:单例模式:class Singletonprivate static Singleton instance; private Singleton() public static Singleton GetInstance()if (instance = null) instance = new Singleton(); return instance; 客户端代码:class Programstatic void Main(string args) Singleton s1 = Singleton.GetInstance(); Sin
4、gleton s2 = Singleton.GetInstance(); if (s1 = = s2) Console.WriteLine(Objects are the same instance); Console.Read(); 多线程时的单例(Lock是确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放)class Singletonprivate static Singleton instance; private static readonly object syncRoot = new objec
5、t(); private Singleton() public static Singleton GetInstance()lock (syncRoot) if (instance = null) instance = new Singleton(); return instance ; 双重锁定:不用让线程每次都加锁,而只是在实例未被创建的时候再加锁处理。同时也能保证多线程的安全性。class Singletonprivate static Singleton instance; private static readonly object syncRoot = new object();
6、private Singleton() public static Singleton GetInstance()if (instance = null) lock (syncRoot) if (instance = null) instance = new Singleton(); return instance;静态初始化:不需要开发人员显示地编写线程安全代码,即可解决多线程环境下它是不安全的问题。public sealed class Singleton private static readonly Singleton instance=new Singleton(); private
7、 Singleton() public static Singleton GetInstance()return instance; 组合模式:l 透明方式:在Component中声明所有用来管理子对象的方法,其中包括Add、Remonve等。这样实现Component接口的所有子类都具备了Add和Remove。这样做的好处就是叶节点和枝节点对外界没有区别,他们具备完全一致的行为接口。l 安全方式:在Component接口中不去声明Add和Remove方法,那么子类的Leaf也就不要去实现它,而是在Composite声明所有用来管理子类对象的方法。由于不透明,客户端要做判断。外观模式:创建AD
8、O.NET的Faade2、 设计模式的两大主题是什么?答:对象组合,类继承的讨论3、 设计模式分成几大类?每大类各包含哪些模式?答:模式大体上分为3类,分别从对象的创建、对象的结构和对象的行为这3个方面来总结软件开发人员在设计方面的经验。(1)创建型模式单件模式(Singleton):单例模式确保某一个类有且仅有一个实例,并且提供了一个全局的访问点,切自行实例化并向整个系统提供这个实例。抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。(抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个
9、抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据LSP原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。换言之,也就是这些抽象产品的具体子类的实例。工厂类负责创建抽象产品的具体子类的实例。)建造者模式(Builder):将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立地变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分
10、步骤进行的建造过程。工厂方法模式(Factory Method):抽象工厂类负责定义创建对象的接口,具体对象的创建工作由实现抽象工厂的具体工厂类来完成。工厂类不再负责所有产品的创建,而是将具体的创建工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。原型模式(Prototype):通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。(没有的)简单工厂模式(Simple Factory):定义一个具体的工厂类来负责创建一些类的实例,而这些被创建的类都应该有一个共同的父类,这样就可以实
11、现面向抽象而不是面向具体编程。客户类和工厂类分开,客户类任何时候需要某种产品,只需向工厂请求即可,客户类无需修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。(2)结构型模式适配器模式(Adapter):把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。(将类自己的接口包裹在一个已存在的类中。)桥接模式(Bridge):将抽象化与实现化脱耦,使得两者可以独立地变化,也就是指在一个软件系统的抽象化和实现化之间使用组合关系而不是继承关系,从而使两者可以独立地变化。装饰模式(Decorator):装饰模式以对客户端透明的方式扩
12、展对象的功能,是继承关系的一个替代方案,提供比继承更多的灵活性。(装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。)组合模式(Composite):用来描述整体与部分的关系,组合模式使得客户端把一个个单独的成分对象和由它们复合而成的合成对象同等看待。(有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 )外观模式(Facade):为子系统对外提供的一组接口提供一个统一的界面,使得其他系统对该系
13、统的访问都通过这个统一的界面来完成。享元模式(Flyweight):享元模式以共享的方式高效地支持大量的细粒度对象,享元模式能做到共享的关键是区分内蕴状态和外蕴状态。内蕴状态存储在享元内部,不会随环境的改变而有所不同。外蕴状态是随环境的改变而改变的,享元模式大幅度地降低内存中对象的数量。代理模式(Proxy):代理模式给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用。(3)行为型模式模板方法模式(Template Method):定义一个算法执行的骨架,而将具体的算法延迟到子类中来实现。命令模式(Command):命令模式把一个请求或者操作封装到一个对象中,命令模式把发出命令的责任
14、和执行命令的责任分割开,委派给不同的对象。(将一组行为抽象为对象,实现二者之间的松耦合。)迭代器模式(Iterator):可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象。(分离了集合对象的遍历行为,抽象出一个迭代器来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据。)观察者模式(Observer):让多个观察者对象同时监听某一个主题对象,这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。(在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系”-一个对象(目标对象)的状态发生改变,所有依赖对象(观察者对象)都将得到通知。如果
15、这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。)解释器模式(Interpreter Pattern):解释器模式属于行为型模式,其意图是给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。中介者模式(Mediator Pattern):把各个组件(对象)之间的复杂交互通讯通过其中的一个“中介者”来处理。提供一种松耦合的方式,解决对个对象之间复杂的交换问题。在这种模式中,只有一个类彻底清楚其他类的方法,当类发生变化时,他们会通知中介者,在由中介者将改变通知
16、其他相关的类(对象/组件)。 (用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。)(没有的)调停者模式(Mediator):调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显依赖,从而使它们可以松耦合。调停者模式将多对多的相互作用转化为一对多的相互作用。职责链模式(Chain of Responsibility):请求在职责链上传递,直到链上的某一个对象决定处理此请求,客户并不知道链上的哪一个对象最终处理这个请求,系统可以在不影响客户端的情况下动态地重新组织链和分配责任。备忘录模式(Memento):
17、备忘录对象是一个用来存储另外一个对象内部状态的快照的对象,备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态存储起来,从而可以在将来合适的时候把这个对象还原到存储前的状态。策略模式(Strategy):策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。(属于对象行为型设计模式)访问者模式(Visitor):访问者模式的目的是封装一些施加于某种数据结构元素之上的操作,一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变。状态模式(State):状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类,
18、状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。模板模式和策略模式的应用情景类似,但实现方式不同,前者使用继承,后者使用委托。模板模式的缺点是把具体实现和通用算法紧密地耦合起来,使得具体实现只能被一个通用算法操纵,而策略模式是委托的经典用法,策略模式消除了通用算法和具体实现的耦合,使得具体实现可以被多个通用算法操纵,策略模式也增加了类层次,比模板模式复杂。4、 为什么要使用设计模式?使用设计模式有哪些好处?答:好处:指在软件设计和开发过程中,不断总结出来的,反应了某一类设计问题的解决方案模式是一种指导,在一个良好的指导下,有助于你完成任务,有助于你作出一个优良的设计方案,达
19、到事半功倍的效果。而且会得到解决问题的最佳办法,设计模式使人们可以更加简单方便地复用成功的设计和体系结构,设计模式帮助你从别人的成功经验而不是你自己的失败那里学到更多东西。设计模式提供了一种共享经验的方式,可以使团体受益和避免不断的重复发明5、 比较抽象工厂模式和工厂方法模式相似性和差异性。什么情况下使用抽象工厂模式?什么情形下使用工厂方法模式?答:简单工厂模式,工厂方法模式和抽象工厂模式都是属于创建型设计模式,这三种创建型模式都不需要知道具体类。我们掌握一种思想,就是在创建一个对象时,需要把容易发生变化的地方给封装起来,来控制变化(哪里变化,封装哪里),以适应客户的变动,项目的扩展。用这三种
20、设计模式都可以实现,那究竟这三种设计模式有什么异同呢?下面为比较:简单工厂模式:专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。它又称为静态工厂方法模式。它的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。在这个模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优
21、化。工厂方法模式:工厂方法是粒度很小的设计模式,因为模式的表现只是一个抽象的方法。提前定义用于创建对象的接口,让子类决定实例化具体的某一个类,即在工厂和产品中间增加接口,工厂不再负责产品的创建,由接口针对不同条件返回具体的类实例,由具体类实例去实现。工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。首先完全实现开闭 原则,实现了可扩展。其次实现更复杂的层次结构,可以应用于产品结果复杂的场合。工厂方法模式是对简单工厂模式进行了抽象。有一个抽象的Factory类(可以是抽象类和接口),这个类将不在负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。在这个模式中,工厂
22、类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品。 抽象工厂模式:抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。它有多个抽象产品类,每个抽象产品类可以派生出多个具体产品类,一个抽象工厂类,可以派生出多个具体工厂类,每个具体工厂类可以创建多个具体产品类的实例。每一个模式都是针对一定问题的解决方案,工厂方法模式针对的是一个产品等级结构;而抽象工厂
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word 软件设计 模式 复习题
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。