ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:27.12KB ,
资源ID:7983212      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7983212.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(设计模式考点.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

设计模式考点.docx

1、设计模式考点设计模式题库 -自编版选择题1、设计模式具有()的优点。A、提高系统性能 B、降低软件规模和复杂度C、减少代码开发工作量 D、提升软件设计的质量2、在面向对象软件的开发中,采用设计模式()。A、可以减少在设计和过程中需要创建的实例对象的数量B、可以保证程序的运行速度达到最优值C、可以复用相似问题的相同解决方案D、允许在非面向对象程序设计语言中使用面向对象的概念3、()都是行为型设计模式。A、组合模式、适配者模式和代理模式B、观察者模式、职责链模式和策略模式C、原型模式、建造者模式和单例模式D、迭代器模式、命令模式和桥接模式4.开闭原则是面向对象的可复用设计的基石, 开闭原则是指一个

2、软件实体应当对()开放,对()关闭;里氏代换原则是指任何()可以出现的地方,()一定可以出现;依赖倒置原则就是依赖于(),而不要依赖于(),或者说要针对接口编程,不要针对实现编程。A、修改 B、扩展 C、分析 D、设计A、修改 B、扩展 C、分析 D、设计A、变量 B、常量 C、基类对象 D、子类对象A、变量 B、常量 C、基类对象 D、子类对象A、程序设计语言 B、建模语言 C、实现 D、抽象A、程序设计语言 B、建模语言 C、实现 D、抽象5.关于单一责原则,以下叙述错误的是()。A、一个雷只负责一个功能领域中的相应职责。B、就一个类而言,应该有且仅有一个引起它变化的原因。C、一个类承担的

3、职责越多,越容易复用,被复用的可能性越大。D、当一个类承担的职责过多时,需要将职责进行分离,将不同的职责封装在不同的类中。6.以下关于面向对象设计的的叙述中,错误的是()。A、高层模块不应该依赖于低层模块。B、抽象不应该依赖于细节。C、细节可以依赖于抽象。D、高层模块无法不依赖于低层模块。7.在系统设计中应用迪米特法则,以下叙述有误的是()。A、在类的划上, 一个尽量创建松耦合的类, 类的耦合度越低, 复用越容易。B、如果两个类之间不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。C、在对其他类的引用上,一个对象对其他对象的引用应该降到最低。D、在类的设计上,只要有可能,一个类型应该尽

4、量设计成抽象类或接口,且成员变量和成员函数的访问权限最好设置为公开的。8.在简单工厂模式中, 如果需要增加新的具体产品, 通常需要修改 ()的源代码。A、抽象产品类 B、其他具体产品类 C、工厂类 D、客户类9.以下关于简单工厂模式叙述错误的是()。A、简单工厂模式可以根据参数的不同返回不同的产品类的实例。B、简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。C、简单工厂模式可以减少系统中的类的个数,简化系统的设计,使得系统更易于理解。D、系统的扩展困难,在添加新的产品时需要修好工厂的业务逻辑,违背了开闭原则。10.以下代码使用了()模式。abstract c

5、lass Productpublic abstract void Process();class ConcreateProductB:ProductPublic override void Process().Class FactoryPublic static Product CreateProduct(char type)Switch(type)CaseA:Return new ConcreateProductA();break;CaseB:Return new ConcreateProductB();break;A、Simple Factory B 、Factory MethodB、C、

6、Abstract Factory D 、未使用任何设计模式11.不同品牌的手机应该由不同是公司所造, 例如 Motorola 公司生产 Motorola 手机,Nokia公司生产 Nokia手机。该场景蕴含了()模式。A、Simple Factory B、Factory Method C、Abstract FactoryD、Builder12.以下关于工厂方法模式的叙述错误的是()。A、在工厂方法模式中引入了抽象工厂类,二具体产品的场景延迟到具体工厂中实现B、使用工厂方法模式添加新的产品对象很容易, 无须对原有系统进行修改,符合开闭原则C、工厂方法模式存在的问题是在添加新产品时, 需要编写新的

7、具体产品类,而且提供与之对应的具体工厂类,随着类个数的增加,会给系统带来一些额外开销。D、工厂方法模式是所有形式的工厂模式中的最为抽象和最具一般性的一种形态,工厂 方法模式退化后可以演变成抽象工厂模式。13.某银行系统采用工厂模式描述其不同账户之间的关系, 设计出的类图如图 4-7所示。其中,与工厂模式中的“ Creator”角色相对应的类是();与“ Product”角色相对应的类是()。class Class ModelBankClient + createAccount()HoldsAccount1.*Checking SavingsA、Bank B、Account C、Checking

8、 D、SavingsA、Bank B、Account C、Checking D、Savings14、关于 C#中的 MemberwiseClone()方法,以下叙述有误的是()。A、对于对象 x,都有 x.MemberwiseClone()=xB、对于对象 x,都有 x.MemberwiseClone().GetType()=x.GetType()C、对于对象 x 的成员对象 Member,都有x.MemberwiseClone().Menber=x.MemberD、对于对象 x的成员对象 Member,都有x.MemberwiseClone().Member.GetType()=x.Memb

9、er.GetType. 15.以下关于原型模式叙述错误的是()。A、原型模式通过给出一个原型对象来指明所要创建的对象的类型, 然后用复制这个原型对象的方法创建出更多同类型的对象B、浅克隆仅仅复制所考虑的对象, 而不复制它所引用的对象, 也就是其中的成员对象并不复制C、在原型模式中实现深克隆时通常需要编写较为复杂的代码D、在原型模式中不需要为每一个类配备一个克隆方法,因此对于原型模式的扩展 很灵活,对于已有类的改造也较为容易16.某公司要开发一个即时聊天软件,用户在聊天过程中可以与多位好友同时聊天,在私聊时将产生多个聊天窗口, 为了提高聊天窗口的创建效率, 要去根据第一个窗口快速创建其他窗口。针

10、对这种需求,采用()进行设计最为合适。A、享元模式 B、单例模式 C、原型模式 D、组合模式17.在()时可使用单例模式。A、隔离菜单项对象的创建和使用B、防止一个资源管理器窗口被实例化多次C、使用一个已有的查找算法而不想修改既有代码 D、不能创建子类,需要扩展一个数据过滤器18.以下关于单例模式的描述,正确的是()。A、它描述了只有一个方法的类的集合B、它能够保证一个类只产生一个唯一的实例C、它描述了只有一个属性的类的集合D、它能够保证一个类的方法只能被一个唯一的类调用19.以下()不是单例模式的要点。A、某个类只能有一个实例B、单例类不能被继承C、必须自行创建单个实例D、必须自行向整个系统

11、提供单个实例20、()将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。A、命令(Command)模式 B、适配器(Adapter)模式C、策略(Strategy)模式 D、单例(Simple)模式21.以下关于适配器模式的叙述错误的是()。A、适配器模式将一个接口装换成客户希望的另一个接口,使得原本由于接口不兼容那些类可以一起工作。B、在类适配器中, Adapter 和 Adaptee 是继承关系,而在对象适配器中,Adapter 和 Adaptee 是关联关系。C、类适配器比对象适配器更加灵活,在 C#语言中可以通过类适配器一次视频多个适

12、配者类。D、适配器可以在不修改原来的适配者接口 Adaptee 的情况下将一个类的接口和另一个类的接口匹配起来。22.现需要开发一个文件转换软件,将文件由一种格式转换为另一种格式,例如将 XML文件转换为 PDF文件,将 DOC文件转换为 TXT文件,有些文件格式转换代码已经存在,为了将已有的代码应用于新软件, 而不需要修改软件的整体结构,可以使用()模式进行系统设计。A、适配器(Adapter) B、组合(Composite)C、外观(Faced) D、桥接(Bridge)23.在对象适配器模式中,适配器类 (Adapter)和适配者类 (Adaptee)之间的关系为()。A、 关联关系 B

13、、依赖关系 C、继承关系 D、实现关系24.()模式将抽象部分与它的实现部分相分离,使它们都可以独立地变化。图10-7 所示为该模式的图,其中,()用于定义实现部分的接口。class 2Abstraction+ Operation() ? interface?Implementor+ OperationImpl()impl.OperationImpl();RefinedAbs traction ConcreteImplementorA ConcreteImplementorB+ Operation() + OperationImpl() + OperationImpl()A、单例(Simple

14、) B、桥接(Bridge) C、组合(Composite) D、外观(Faced)A、Abstraction B、ConcreteImplementorAC、ConcreteImplementorB D、Implementor25.以下关于桥接模式的叙述错误的是()。A、桥接模式的用意是将抽象化与实现化解耦,使得亮着可以独立地变化。B、桥接模式将继承关系转换成关联关系,从而降低系统的耦合度。C、桥接模式来源动态地给一个对象增加功能, 这些功能也可以动态的撤销。D、桥接模式可以从接口中分离实现功能,使得设计更具有扩展性。26.()不是桥接模式所适用的环境。A、一个可以跨平台并支持多种格式的文件

15、编辑器B、一个支持多数据源的报表生成工具 ,可以以不同的图形方式显示报表信息C、一个可动态选择排序算法的数据操作工具D、一个支持多种编程语言的跨平台开发工具27.当不能采用生成子类的方法进行扩展时,可采用()模式动态地给一个对象添加一些额外的职责。A、外观(Faced) B、单例(Simple) C、参与者(Participant) D、装饰(Decorator)1、以下()不是装饰模式的适用条件。A、要扩展一个类的功能或给一个类增加附加责任B、要动态地给一个对象增加功能,这些功能还可以动态撤销C、要动态组合多于一个的抽象化角色和实现化角色D、要通过一些基本功能的组合产生复杂功能,而不使用继承

16、关系28.Windows操作系统中的应用程序快捷方式是()模式的应用实例。A、代理(Proxy) B、组合(Composite) C、装饰(Decorator) D、外观(Faced)1、以下关于代理模式的叙述错误的是()。A、代理模式能够协调调用者和被调用者,从而在一定程度上降低系统的耦合度B、控制对一个对象的访问,给不同的用户提供不同级别的使用权限时可以考虑使用远程代理C、代理模式的缺点是请求的处理速度会变慢,并且实现代理模式需要额外的工作D、代理模式给某一个对象提供一个代理,并由代理对象控制对原对象的引用29.代理模式有多种类型,其中,智能引用代理是指()。A、为某一个目标操作的结果提供

17、临时的存储空间,以便多个客户端可以共享这些结果B、保护目标不让恶意用户接近C、使几个用户能够同时使用一个对象而没有冲突D、当一个对象被引用时,提供一些额外的操作,例如将此对象被调用的次数记录下来30.以下关于命令模式的叙述错误的是()。A、命令模式将一个请求封装为一个对象,从而可以用不同的请求对客户进行参数化B、命令模式可以将请求发送至和请求接受者解耦C、使用命令模式会导致某些系统有过多的具体命令类,导致在有些系统中命令模式变得不切实际D、命令模式是对命令的封装,命令模式把发出命令的责任和执行命令的责任机制在同一个类中,委派给同意的类来进行处理31.在()时无需使用命令模式。A、实现撤销操作和

18、恢复操作B、将请求的发送者和接收者解耦C、不改变聚合类的前提下定义作用于聚合中元素的新操作D、不同的时间指定请求,并将请求排队32.()模式定义了对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。A、适配器 (Adapter) B、迭代器(Iterator)C、原型(Prototype) D、观察者(Observer)33.在观察者模式中,()。A、一个 Subject对象可对应多个 Observer 对象B、Subject只能有一个 ConcreteSubject子类C、Observer只能有一个 ConcreteObserver子类D、一

19、个 Subject对象必须至少对应一个 Observer对象34.下面这句话隐含了()模式。我和妹妹跟妈妈说: “妈妈, 我和妹妹在院子里玩。 饭做好了叫我们一声。 ”A、适配器 B、职责链 C、观察者 D、迭代器简答题1.什么是设计模式,它包含那些基本要素?设计模式是一套反复使用的、多数人知晓、经过分类编目的、 代码设计经验的总结,使用设计模式是为了可重用代码、 让代码更容易被他人理解并且提高代码的可靠性。 设计模式是一种用于对软件系统中不断重现的设计问题的解决方案进行文档化的技术, 也是一种共享专家设计经验的技术。设计模式的基本要素:模式名称、问题、目的、解决方案、效果、实例代码、相关设计

20、模式(其中 有 4 个关键要素 :模式名称、问题、解决方案、效果)2.设计模式如何分类,每一类设计模式有何优点?(1) 根据目的 可分为创建型,结构型和行为型;创建型模式主要用于创建对象结构型模式主要用于处理类或对象的组合行为型模式主要用于描述类或对象如何交互和怎样分配职责(2) 根据范围 ,即模式主要是处理类之间的关系还是处理对象之间的关系,可分为类模式和对象模式;类模式处理类和子类之间的关系, 这些关系通过继承建立, 在编译时刻就被确定下来,是一种静态关系对象模式处理对象间的关系,这些关系在运行时变化,更具动态性3.设计模式具有哪些优点?(1)融合了众多专家的经验,并以一种标准的形式供广大

21、开发人员所用(2)提供了一套通用的设计词汇和一种通用的语言, 以方便开发人员之间进行沟通和交流,使得设计方案更加通俗易懂(3)让人们可以更加简单方便地复用成功的设计和体系结构(4)使得设计方案更加灵活,且易于修改(5)将提高软件系统的开发效率和软件质量,且在一定程度上节约设计成本(6)有助于初学者更深入地理解面向对象思想,方便阅读和学习现有类库与其他系统中的源代码,还可以提高软件的设计水平和代码质量4.常见的设计模式有哪些优点?简单工厂模式: (1)实现了对象创建和使用的分离; (2)客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可;工厂方法模式: (1)工厂方法用

22、来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节;( 2)能够让工厂自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部;( 3)在系统中加入新产品时,完全符合开闭原则;单例模式: (1)提供了对唯一实例的受控访问; (2)可以节约系统资源, 提高系统的性能;原型模式: (1)简化对象的创建过程,通过复制一个已有实例可以提高新实例的创建效率扩展性较好;( 2)提供了简化的创建结构,原型模式中产品的复制是通过封装在原型类中的克隆方法实现的,无须专门的工厂类来创建产品;( 3)可以使用深克隆的方式保存对象的状态,以便在需要的时候使用,可辅助实现撤销操

23、作;适配器模式: (1)将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无须修改原有结构;( 2)增加了类的透明性和复用性,提高了适配者的复用性,同一个适配者类可以在多个不同的系统中复用;( 3)灵活性和扩展性非常好;装饰模式:( 1)对于扩展一个对象的功能,装饰模式比继承更加灵活,不会导致类的个数急剧增加;( 2)可以通过一种动态的方式来扩展一个对象的功能,通过配置文件可以在运行时选择不同的具体装饰类,从而实现不同的行为;( 3)可以对一个对象进行多次装饰;(4)具体构件类与具体装饰类可以独立变化,用户可以根据需要增加新的具体构件类和具体装饰类,且原有类库代码无须改变,符合

24、开闭原则;代理模式: (1)能够协调调用者和被调用者,在一定程度上降低了系统的耦合度; (2)客户端可以针对抽象主题角色进行编程,增加和更换代理类无须修改源代码,符合开闭原则,系统具有较好的灵活性和可扩展性;桥梁模式: (1)需要在抽象化和具体化之间增加更多的灵活性,避免在两个层次之间建立静态的继承关系;( 2)抽象部分和实现部分可以以继承的方式独立扩展而互不影响;( 3)一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立地进行扩展不希望使用继承或因为多层继承导致系统类的个数急剧增加的系统;观察者模式: (1)可以实现表示层和数据逻辑层的分离; (2)在观察目标和观察者之

25、间建立一个抽象的耦合; (3)支持广播通信,简化了一对多系统设计的难度; (3)符合开闭原则,增加新的具体观察者无须修改原有系统代码, 在具体观察者与观察目标之间不存在关联关系的情况下,增加新的观察目标也很方便;命令模式: (1)降低了系统的耦合度; (2)新的命令可以很容易地加入到系统中,符合开闭原则; (3)可以比较容易地设计一个命令队列或宏命令(组合命令); (4)为请求的撤销(Undo) 和恢复 (Redo)操作提供了一种设计和实现方案;5.透明与半透明模式透明模式 :客户端完全对抽象编程;半透明模式 :使用具体装饰类型定义装饰之后的类, 而具体构件可以继续使用抽象构件类型来定义;不可

26、以实现对同一个对象的多次修饰。6.设计原则的概念(前四个)、优点。单一职责原则: 一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。优点:( 1)类的复杂度降低,实现什么职责都有清晰明确的定义; (2)可读性提高;复杂度降低, 那当然可读性提高了; (3)可维护性提高, 可读性提高, 那就更容易维护了; (4)变更引起的风险降低;也就是说提高了扩展性和可维护性开闭原则: 软件实体应当对扩展开放,对修改关闭。优点:方便对系统进行扩展,在扩展时无需修改代码,提高系统的稳定性和延续性。里士代换原则: 所有引用基类的地方必须能透明地使用其子类的对象。优点: 运行时, 子类实例替换父类实例

27、, 可以很方便地扩展系统的功能,无须修改原有子类的代码,增加一个新的功能可以通过增加一个新的子类来实现。依赖倒转原则: 高层模块不应该依赖低层模块, 它们都应该依赖抽象。 抽象不应该依赖于细节,细节应该依赖于抽象。优点: 系统具有很好的灵活性, 当系统行为发生变化,只需要对抽象层进行扩展, 在不修改的情况下来扩展系统的功能。7.浅克隆与深克隆的区别浅克隆: 当原型对象被复制时, 只复制它本身和其中包含的值类型的成员变量, 而引用类型的成员变量并没有复制;深克隆: 除了对象本身被复制外,对象所包含的所有成员变量也将被复制;8.分析理解饿汉式和懒汉式单例的异同。共同点: 饿汉式单例类和懒汉式单例类

28、的构造函数都是私有的。饿汉式单例类: 无须考虑多个线程同时访问的问题;调用速度和反应时间优于懒汉式单例;资源利用效率不及懒汉式单例;系统加载时间可能会比较长懒汉式单例类: 实现了延迟加载; 必须处理好多个线程同时访问的问题; 需通过双重检查锁定等机制进行控制,将导致系统性能受到一定影响9.什么是双重锁定?为什么要进行双重锁定, JAVA中如何实现双重锁定。定义: 是一种对单例对象创建进行控制的双重判断机制。目的: 更好地对单例对象的创建进行控制。实现过程: 在双重检查锁定中,当实例不存在且同时有两个线程调用 Get Instance()方法时,它们都可以通过第一重 “instance=null

29、 ”判断, 如果此时不进行 “instance=null”判断,第二个线程并不知道实例已经创建, 将会创建新的实例, 还会产生多个单例对象, 违背了单例模式的设计思想。代码题1.(简单工厂模式) 使用简单工厂模式模拟女娲( Nvwa)造人(Person),如果向造人的工厂方法传入参数 “M”,则返回一个男人 (Man)对象,如果传入参数 “W”则返回一个女人 (Woman)对象,绘制相应的类图并使用 JAVA语言模拟实现该场景。先需要增加一个新的机器人类, 如果传入参数 “R”则返回一个机器人 (Robot)对象,对代码进行修改并注意女娲类的变化。Person.javapublic inter

30、face Person publicvoid personmethod();Manperson.javapublicclass ManPerson implements Personpublicvoid personmethod()System. out .println( 男人);Woman.javapublicclass WomanPerson implements Person publicvoid personmethod()System. out .println( 女人);Creator.javapublicclass Creator publicstatic Person createperson (String type)Person person = null ;if (type.equals(M)person = new ManPerson();elseif (type.equals(W)person = new WomanPerson();return person;Client.javapublicclass Client publ

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1