设计模式考题复习

一.定义

设计模式六大基本原则:

  1. 单一职责原则:一个类或者一个方法只负责一项职责,尽量做到类的只有一个行为原因引起变化;
  2. 里氏替换原则:能出现子类的地方都应该可以允许父类出现,也就是子类可以扩展父类的功能,而不能改变原有父类的功能使得父类不能用了;(本质其实就是c++的多态)
  3. 依赖倒置原则:通俗点就是说变量或者传参数,尽量使用抽象类,或者接口,也就是针对接口编程,而不要对实现编程。
  4. 接口隔离原则:建立单一接口,复杂的接口,根据业务拆分成多个简单接口。
  5. 迪米特原则:最少知道原则,尽量降低类与类之间的耦合。一个对象应该对其他对象有最少的了解。举个例子:要想实现一个类还需要知道其他100个类这是不是很离谱很不好。
  6. 开闭原则:对扩展开放,对更改封闭。这条原则呢是希望我们尽量不要改动旧代码,因为可能牵一发而动全身嘛,所以设计一个类的时候要想到它最好留有接口(可扩展),并且把自己的访问修改权限管的严一点不要让后来的代码随便改动它(闭更改)。

“黑箱复用”——“B复用A的功能,但B无法看到A的内部细节”
“白箱复用”——“B复用A的功能,并且B可以了解A的内部细节”。

总体来说经典设计模式有23种,但不能说设计模式只有23种。 经典23种设计模式主要分为三大类:

  1. 创建型模式(5):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
  2. 结构型模式(7):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
  3. 行为型模式(11):策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
    因为除了四人组定义的这23种设计模式其实还有两类:并发型模式和线程池模式,所以总设计模式不止23种。

二. 选择题

  1. 下列选项中最适合用依赖关系描述的是:(C)
    A.丈夫和妻子
    B.公司和部门
    C.工厂和产品
    D.水果和苹果
  2. 如果类A仅在其成员函数fun中定义并使用了类B的一个对象,类A其他部分的代码都不涉及类B,那么类A与类B的关系最可能是:(依赖
  3. 设计模式的两大主题是:(系统复用和系统扩展
  4. 提供一个创建一系列相关或相互依赖对象的接口的是:(抽象工厂模式
  5. 小明正在设计一款音视频播放软件,该软件要能支持界面主题的更换,即界面中的按钮、字体、背景等一起随界面主题的改变而变化。针对上述需求,采用哪个设计模式最为合适:(抽象工厂模式
  6. 游戏不同场景中的房屋都由五个部分组成:地板、墙壁、窗户、门和天花板,构建房屋的步骤固定,而具体组件(门、窗等)易变。针对上述房屋,采用哪个设计模式最为合适:(建造者
  7. 开发一个自动生成公文的程序,公文的基本内容包括标题、主送单位、正文、发文单位、日期及签发人等,程序应支持频繁地创建相似公文对象。采用哪个设计模式最为合适:(原型模式
  8. 某公司要开发一个即时聊天软件,用户在聊天过程中可以与多位好友同时聊天,在私聊时将产生多个聊天窗口,为了提高聊天窗口的创建效率,要求根据第一个窗口快速创建其他窗口。针对这种需求,采用( 原型模式 )进行设计最为合适。
  9. 下列关于适配器模式的描述中,不正确的是:(D)
    A. 适配器模式可以将一个接口转换成客户希望的另一个接口
    B. 适配器模式中目标类(Target)可以是一个抽象类或接口,也可以是具体类
    C. 适配器模式既可以作为类结构型模式,也可以作为对象结构型模式
    D. 同一个适配器可以把适配者类和它的子类都适配到目标接口
    解析:D选项中只有对象适配器才可以,类适配器把关系写死了,对类适配器不适用
  10. 用于分离接口和具体实现,使得接口和实现可独立变化的是:(桥接模式),桥接模式的本质是(分离抽象和实现
  11. 小明正在维护一个遗留的大型系统,该系统设计粗糙且遗留代码高度复杂,但新需求的开发却必须依赖于它所包含的一些功能,针对上述需求,采用(外观模式)设计模式最为合适
  12. 设计一个模块M,为系统中其他模块提供访问不同数据库的通用接口,这些数据库的访问接口有一定的差异,但访问过程相同,例如,先连接数据库,再打开数据库,最后对数据库进行查询。针对上述模块M,采用(外观模式)设计模式最为合适
  13. 代理模式的本质是(控制对象访问
  14. 计算机使用者一般会在Windows系统桌面上设置常用软件的快捷方式,以快速方便地启动软件。针对上述场景,(代理模式)的设计模式最为合适
  15. Web开发人员对Web服务器管理的所有Web资源:例如JSP,Servlet,静态图片文件或静态HTML文件等进行拦截,从而实现一些特殊的功能,例如实现URL级别的权限访问控制,过滤敏感词汇,压缩响应信息等,针对上述需求,采用(职责链模式)模式最为合适
  16. MVC架构在实现上结合了多种设计模式,其中最典型的模式应用是:(中介者和观察者)——MVC模式是一种架构模式,它包含三个角色:模型Model、视图View和控制器Controller。观察者模式可以用来实现MVC模式,观察者模式中的观察目标就是模型Model,而观察者是视图View,控制器Controller充当两者之间的中介者,当模型层Model发生变化时,视图层View就会自动变更其显示内容。
  17. 设计模式的关键要素不包括(目的
  18. 以设计复用为目的,采用一种良好定义、正规的、一致的方式记录的软件设计经验的是:(设计模式
  19. 设计模式的关键要素:(名称、解决方案、效果、问题
  20. 设计模式的关键要素不包括:(实现、目的
  21. 设计模式的主要优点:(适应需求变化
  22. 描述对象所能接受的全部请求的集合的是:(接口
    对象接口描述了该对象所能接受的全部请求的集合,因此任何匹配对象接口中型构的请求都可以发送给该对象。 设计模式通过确定接口的主要组成成分及经接口发送的数据类型,来帮助你定义接口。
  23. 发送给对象的请求和它的相应操作在运行时刻的连接就称之为动态绑定(Dynamic Binding)动态绑定是指发送的请求直到运行时刻才受你的具体的实现的约束。动态绑定允许你在运行时刻彼此替换有相同接口的对象,这种可替换性就称为多态(Polymorphism)。
  24. 在继承关系中,方法应向父类(超类)集中,数据应向子类集中。
  25. 简单工厂模式——》工厂模式——》抽象工厂模式
    第一次进化分离了具体工厂创建过程
    第二次进化分离了产品种类的细节
  26. 有时你不得不改变一个难以修改的类。也许你需要源代码而没有(对于商业类库就有这种情况),或者可能对类的任何改变会要求修改许多已存在的其他子类。提供在这些情况下对类进行修改的方法的模式是(适配器模式、装饰模式、访问者模式

3. 简答题

  1. 为什么优先使用对象组合而不是类继承
    因为继承会使类之间高度耦合,组合确实比继承更加灵活,也更有助于代码维护。

  2. 请举例说明你对创建型设计模式的理解
    创建型模式分为5种:简单工厂模式、工厂模式、抽象工厂模式、原型模式、单例模式。它重点在于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。

  3. 请举例说明哪些情况下可以使用组合模式
    宏命令,MVC中的View图,文件夹的管理

  4. 抽象工厂模式和原型模式有哪些相同和不同,可以联合使用吗br> 抽象工厂模式:通常由工厂方法模式来实现。但一个工厂中往往含有多个工厂方法生成一系列的产品。这个模式强调的是客户代码一次保证只使用一个系列的产品。当要切换为另一个系列的产品,换一个工厂类即可。
    原型模式:工厂方法的最大缺点就是,对应一个继承体系的产品类,要有一个同样复杂的工厂类的继承体系。原型模式中的工厂方法为clone,它会返回一个拷贝(可以是浅拷贝,也可以是深拷贝,由设计者决定)。为了保证用户代码中到时可以通过指针调用clone来动态绑定地生成所需的具体的类。这些原型对象必须事先构造好。
    原型模式相对工厂方法模式的另一个好处是,拷贝的效率一般对构造的效率要高。
    二者可以联合成为原型工厂模式

  5. 请给出一个适合使用策略模式的示例场景,并说明与不使用策略模式相比,使用策略模式有哪些优点
    超市的各种折扣策略。
    策略模式满足“开闭原则”,超市可以在不修改原有系统的基础上选择算法和行为,对现有优惠策略的变更非常方便。策略模式可以避免使用多重条件转移语句

  6. 请举例说明你对白箱复用和黑箱复用的理解
    继承就是白箱复用,对于父类的封装性不好;组合时黑箱复用,调用者并不清楚依赖对象的实现细节。

  7. GOF设计模式有几种类型,分别包括那些模式
    23种,分别是创建型模式(5种)、结构型模式(7种)、行为型模式(11种)

  8. 请举例说明桥接模式如何将抽象部分与它的实现部分分离,使它们可以独立地变化
    假如你有一个几何形状Shape类,从它能扩展出两个子类: ? 圆形Circle和 方形Square 。 你希望对这样的类层次结构进行扩展以使其包含颜色,所以你打算创建名为红色Red和蓝色Blue的形状子类。 如图所示的桥接模式uml图实现了在颜色和形状两个维度上的划分:

  9. 提供一个创建一系列相关或相互依赖对象的接口的是:抽象工厂模式

  10. 下图描述的是那种模式象工厂模式

    设计模式考题复习
  11. 小明正在设计一款音视频播放软件,该软件要能支持界面主题的更换,即界面中的按钮、字体、背景等一起随界面主题的改变而变化。针对上述需求,采用哪个设计模式最为合适:抽象工厂模式

  12. 某公司要开发一个图表显示系统,在该系统中曲线图生成器可以创建曲线图、曲线图图例和曲线图数据标签,柱状图生成器可以创建柱状图、柱状图图例和柱状图数据标签。用户要求可以很方便地增加新类型的图形,系统需具备良好的可扩展能力。针对这种需求,公司采用( 抽象工厂模式 )最为恰当。

  13. 游戏不同场景中的房屋都由五个部分组成:地板、墙壁、窗户、门和天花板,构建房屋的步骤固定,而具体组件(门、窗等)易变。针对上述房屋,采用哪个设计模式最为合适:(建造者)

  14. 开发一个自动生成公文的程序,公文的基本内容包括标题、主送单位、正文、发文单位、日期及签发人等,程序应支持频繁地创建相似公文对象。采用哪个设计模式最为合适:原型模式

  15. 某公司要开发一个即时聊天软件,用户在聊天过程中可以与多位好友同时聊天,在私聊时将产生多个聊天窗口,为了提高聊天窗口的创建效率,要求根据第一个窗口快速创建其他窗口。针对这种需求,采用( 原型模式 )进行设计最为合适。

  16. 限制类的实例对象只能有一个的是:单例模式

  17. 下列关于单例模式的描述中,不正确的是:单例类可以派生子类,易于扩展

  18. 某软件系统需要从指定的XML文件读取较多的配置参数,作为全局共享资源,方便系统初始化及运行过程中使用。针对上述场景,哪个设计模式最为合适:单例

  19. 将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作的是:适配器模式

  20. 下列关于适配器模式的描述中,不正确的是:同一个适配器可以把适配者类和它的子类都适配到目标接口

  21. 在对象适配器中,适配器类(Adapter)和适配者类(Adaptee)之间的关系为:关联关系

  22. 现在需要开发一个文件转换软件,将文件由一种格式转换成另一种格式,例如将XML文件转换成PDF文件,将DOC文件转换成TXT文件,有些文件格式转换代码已经存在,为了将已有的代码应用于新软件而不需要修改软件的整体结构,可以使用:适配器模式

  23. 用于分离接口和具体实现,使得接口和实现可独立变化的是:桥接模式

  24. 桥接模式的本质是:分离抽象和实现

  25. 轿车可按品牌分,如红旗、奔腾、中华等,也可按变速方式来分,如手动、自动等,还可按驱动方式来分,如前驱、后驱、四驱等。针对上述轿车,采用哪个设计模式最为合适:桥接模式

  26. 小明正在设计一个银行业务系统,该系统对于日志记录有如下要求:按格式分类需记录操作日志、 交易日志、 异常日志等; 按照距离分类分为在本地记录日志和在异地记录日志等。针对上述需求,采用哪个模式能够方便地记录各种日志:桥接模式

  27. 可以用来描述树形结构的是:组合模式

  28. 为了使客户端以一致的方式处理树形结构中的叶子节点和容器节点,实现客户端的透明操作,组合模式中引入了:抽象构件类

  29. 用于为一个对象添加更多功能而不使用子类的是:装饰模式

  30. 下列关于外观模式的描述中,不正确的是:外观模式是迪米特原则的一种具体实现,同时也完全符合开闭原则

  31. 下列哪个模式是迪米特原则的典型应用:外观模式

  32. 小明正在维护一个遗留的大型系统,该系统设计粗糙且遗留代码高度复杂,但新需求的开发却必须依赖于它所包含的一些功能,针对上述需求,采用哪个设计模式最为合适:外观模式

  33. 设计一个模块M,为系统中其他模块提供访问不同数据库的通用接口,这些数据库的访问接口有一定的差异,但访问过程相同,例如,先连接数据库,再打开数据库,最后对数据库进行查询。针对上述模块M,采用哪个设计模式最为合适:外观模式

  34. 在构建一个层次结构的系统时,可以使用下列哪个模式来定义系统中每层的入口点:外观模式

  35. 小明要编写一个鼠标击点破泡泡的解压小游戏,假设共有66个泡泡,每个泡泡的大小都一样,颜色随机,但一定是5种指定颜色中的1种,位置随机,那么设计泡泡时最适合使用: 享元模式

  36. 下列关于代理模式的描述中,不正确的是:代理模式中客户端需要知道真实主题(RealSubject)对象

  37. 代理模式的本质是:控制对象访问

  38. 计算机使用者一般会在Windows系统桌面上设置常用软件的快捷方式,以快速方便地启动软件。针对上述场景,哪个设计模式最为合适:代理模式

  39. 下列关于职责链模式的描述中,不正确的是:发出这个请求的客户端知道链上的哪一个处理者最终处理了这个请求

  40. 下列关于命令模式的描述中,不正确的是:宏命令是命令模式和装饰模式联用的产物

  41. Web开发人员对Web服务器管理的所有Web资源:例如JSP,Servlet,静态图片文件或静态HTML文件等进行拦截,从而实现一些特殊的功能,例如实现URL级别的权限访问控制,过滤敏感词汇,压缩响应信息等,针对上述需求,采用哪个模式最为合适:职责链模式

  42. 体现“集中管理多个对象间的交互过程和顺序”的是:中介者模式

  43. 下列关于中介者模式的描述中,不正确的是:中介者模式用中介者和同事的多对多交互代替了原来同事之间的一对多交互

  44. 个人计算机由主板、CPU、内存、显卡、声卡、 卡和硬盘等配件组装而成,各个配件的交互一般通过主板来完成,针对上述场景,哪个设计模式最为合适:中介者

  45. 小明正在设计一个通用数据处理软件,需要支持多个系统之间的数据传递与交换。该软件要求能够屏蔽各系统之间的直接数据交互,使其耦合松散,并且可以独立改变系统之间的交互过程。针对上述需求,采用哪个模式最为合适:中介者模式

  46. 很多游戏软件中都提供了“储存/载入进度”的功能,支持玩家在中断游戏后仍然能够重新载入被储存的进度继续游戏。针对上述场景,哪个设计模式最为合适:备忘录

  47. 下列关于状态模式和策略模式的描述中不准确的是:使用状态模式时,客户端需要知道环境类的状态是如何切换的

  48. 要创建一个触发链,A对象行为将影响B对象,B对象行为将影响C对象……,可以使用:观察者模式

  49. MVC架构在实现上结合了多种设计模式,其中最典型的模式应用是:中介者和观察者

  50. 兄弟俩要到操场上玩,临走时,跟妈妈说:“我俩玩去了,饭好了,招呼我们”。这段话所描述的场景最适合下列能哪种模式的应用场景察者模式

  51. 小明正在设计一个 价管理模块,要求对普通客户或新客户 全价,对老客户 价统一折扣5%,对大客户 价统一折扣10%。针对上述需求,采用哪个设计模式最为合适:策略模式

  52. 三国演义中刘备去东吴招亲,赵云得授3个锦囊妙计,分别是找乔国老帮忙、求吴国太放行及孙夫人断后,以助刘备顺利回归。针对上述场景,采用哪个设计模式最为合适:策略模式

  53. 下列选项中不属于对象模式的是:模板方法模式

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年1月5日
下一篇 2022年1月5日

相关推荐