牛客专项练习之设计模式

开头先一句水平有限,仅供参考。有错误可以提醒我改一下,感谢。

1.如果需要一个语言解释执行,并且可以将语言中的句子表示为一个抽象语法树的时候,对效率要求不高的情况下,应该选择何种设计模式?
在这里插入图片描述
题目中的解释二字就告知选项。
解释器模式:给定语言,定义其文法表示,定义解释器解释语言中句子。

2.对象间存在一对多关系,当一个对象被修改时,则会自动通知它的依赖对象,采用以下哪种设计模式最好?
在这里插入图片描述
观察者模式:一对多关系,一个对象被修改时会通知其依赖对象。

3.某OA系统需要提供一个假条审批的模块,如果员工请假天数小于3天,主任可以审批该假条;如果员工请假天数大于等于3天,小于10天,经理可以审批;如果员工请假天数大于等于10天,小于30天,总经理可以审批;如果超过30天,总经理也不能审批,提示相应的拒绝信息。如果假条审批使用模式来进行设计,可以使用()模式。
在这里插入图片描述
责任链模式:对象和每一个对象对其下家的引用连接起来形成一条链,请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任

4.假设一个电源总开关可以控制四盏灯、一个风扇、一台空调和一台电视机的启动和关闭。通过该电源总开关可以同时控制上述所有电器设备,可以使用() 来模拟设计该系统。
在这里插入图片描述
外观模式:隐藏系统复杂性,向客户端提供了一个可以访问系统的接口。
本题外观模式访问系统的接口:电源总开关。

5.如果强调一系列相关产品的接口,以便联合使用它们的时候,应该选择何种设计模式:
在这里插入图片描述
抽象工厂模式:提供了一个创建一系列相关或相互依赖的对象接口,而且无须指定它们的具体类。
组合模式:将对象组合成树形结构展示 ”部分-整体“ 的层次结构,客户以一致方式处理单个对象以及对象的组合。

6.对数据库的操作一般包括连接、打开、使用、关闭等步骤,对于不同类型的数据库,其操作步骤都一致,只是连接数据库方法有所区别,可以使用()对其进行设计
在这里插入图片描述
模板方法模式:定义算法的骨架,将一些步骤延迟到子类中实现。子类可以在不改变算法骨架的基础上重定义某些步骤。

7.在模拟毛笔的使用过程中提供了大中小3种型号的画笔,够绘制5种不同颜色。我们可以使用()来模拟实现模拟毛笔的使用。
在这里插入图片描述
桥接模式:抽象和实现分开,组合代替继承。(某些类有好几个维度)。
本题中毛笔又有型号维度,又有颜色维度。

8.如果在更改一个对象的时候,需要同时连带改变其他的对象,而且不知道究竟应该有多少对象需要被连带改变,应该使用何种设计模式:
在这里插入图片描述
注意题目的改变二字:一个对象改变其他依赖的对象要被通知——观察者模式。
策略模式:一个类的行为或其算法可以在运行时更改。(比如出行的方式就是策略)

9.Open-Close原则的含义是一个软件实体( )
在这里插入图片描述
10.当已有类能满足目前的需求但和当前的系统兼容性比较差的情况下,比较适合使用( )
在这里插入图片描述
适配器模式:是作为两个不兼容的接口之间的桥梁。涉及一个单一类加入独立或不兼容的接口功能。

11…通过电视机遥控器可以实现对电视机频道进行选择,其实选择电视机频道就是对存放频道的集合进行遍历操作。所以可以使用( )模拟电视机遥控器的实现
在这里插入图片描述
题目中说:对集合遍历操作——迭代操作
迭代器模式:顺序访问一个聚合对象中各个元素, 无须暴露该对象的内部表示。

12.购物车设计:顾客在超市中将选择的商品,如苹果、图书等放在购物车中,然后到收银员处付款。在购物过程中,顾客需要对这些商品进行访问,以便确认这些商品的质量,之后收银员计算价格时也需要访问购物车内顾客所选择的商品。购物车设计可以使用()来设计该购物过程。
在这里插入图片描述
题目中的“访问”:暗示是访问者模式。
访问者模式:需要对一个对象进行很多不同且不相关的操作,需要避免"污染"这些对象的类,使用访问者模式将这些封装到类中。
本题中的不同且不相关的操作:访问确定质量和计算价格。

13.系统中的文本显示类(TextView)和图片显示类(PictureView)都继承了组件类(Component),分别显示文本和图片内容,现需要构造带有滚动条、或者带有黑色边框、或者既有滚动条又有黑色边框的文本显示控件和图片显示控件,但希望最多只增加三个类,()设计模式可以实现该目的。
在这里插入图片描述
装饰器模式:在不想增加很多子类的情况下扩展类,创建一个装饰器类,保持类方法完整的情况下增加额外功能。

14.下面属于结构模式的有()
在这里插入图片描述
结构模式将类或对象按布局变成更大的结构(改变结构)。
包括:(自己助记的口诀哈哈哈:戴士乔装外向组)
1.代理模式:提供一种代理控制对对象的访问,通过代理间接访问对象,限制或修改对象特性。
2.适配器模式:一个类的接口转换为希望的另一个接口,让本来不能兼容的类一起工作。
3.桥接模式:抽象和实现分离,组合代替继承,一般用于对象的多个维度都会变化的场景。
4.装饰器模式:创建一个装饰器类,保持类方法完整的情况下增加额外功能。
5.外观模式:隐藏系统内部复杂情况,提供一个接口访问子系统。
6.享元模式:用于减少创建对象的数量,以减少内存占用和提高性能。
7.组合模式:将对象组合成树形结构以表示"部分-整体"的层次结构,把一组对象当成一个对象。

单例模式是创建型模式,是在创建对象。

15.如果让你来实现前端的MVVM框架,View层需要支持不同终端的不同交互,下面哪些设计模式不太适合用来实现这个需求()
在这里插入图片描述
不同终端的不同交互——单例就一个对象怎么弄。

16.以下关于外观模式的叙述中正确是( )
在这里插入图片描述
外观模式:隐藏系统内部复杂情况,提供一个接口访问子系统。
实例:电源总开关,子系统外部通过电源开关(外观对象)和内部通信;外部(用户)只操作电源开关(外观对象)和子系统内部交互。
BC选项都对。
A选项:单一职责原则:一个类只有一个变化的原因,本意是让一个类不要承担太多责任。
个人理解举例:电源总开关承担了好多开关(类)责任,所以不符合单一职责原则。
D选项:迪米特法则:最少知识原则,一个类对其他类知道的越少越好,尽量减少相互作用。
个人理解距离:电源总开关(外观对象)隐藏内部复杂情况,外界对其知之甚少,所以满足迪米特法则。

17.某系统提供了用户信息操作模块,用户可以修改自己的各项信息。为了使操作过程更加人性化,可以使用()对系统进行改进,使得用户在进行了错误操作之后可以恢复到操作之前的状态。
在这里插入图片描述
备忘录模式:保存一个对象的某个状态,以便在适当的时候恢复对象。(后悔药)

18.以下关于创建型模式说法正确的是()
在这里插入图片描述
创建型模式:关注对象创建。
结构型模式:关注类和对象的组合,从而达到实现一定的功能。
行为型模式:关注的对象间相互作用/协作/通信。

19.共享网络设备模拟:很多网络设备都是支持共享的,如交换机、集线器等,多台终端计算机可以连接同一台网络设备,并通过该网络设备进行数据转发。共享网络设备可以使用()模拟共享网络设备的设计原理。
在这里插入图片描述
题目的共享二字——享元模式。
享元模式:避免创建过多对象,运用共享技术减少内存。共同部分抽象出来,有相同请求直接返回避免再次创建。

20.下图的UML类结构图表示的是哪种设计模式:
在这里插入图片描述
看图里的Factory朋友们,答案已经告诉我们了。

21.设计模式的两大主题是()
在这里插入图片描述
设计模式的主要目的还是为了扩展和修改服务,改个意思就是系统扩展和复用了。选D。

22.在银行办理业务时,一般都包含几个基本步骤,即取号排队、办理具体业务和对银行工作人员进行评分。无论具体业务是取款、存款还是转账,其基本流程都一样。可以使用( )模拟银行业务办理流程。
在这里插入图片描述
基本流程都一样,除了某些特定步骤——模板办法模式:搭个算法架子,把特定步骤实现延迟到子类中实现。选C。

23.下列关于简单工厂模式与工厂方法模式表述错误的是()
在这里插入图片描述
A选项错了:开闭原则:对扩展开放,对修改关闭——不能修改怎么修改源代码?
简单工厂包含if else判断对象的部分,工厂部分消除了if else,由调用者判断要实例化什么具体工厂创建对象。所以简单工厂不满足开闭原则,工厂模式满足开闭原则。
简单工厂采用了静态方法,所以不继承;工厂模式要用继承从抽象工厂中生成具体工厂。

24.下面关于“单例模式”错误的是()
在这里插入图片描述
A,B显然对。
C选项:单例模式主要解决对象的频繁创建和销毁,该选项如果没有不需要三个字就是对的。
D选项:要扩展只能修改代码。

25.下面的选项中哪些属于工厂模式()
在这里插入图片描述
工厂模式有三种:
1.简单工厂模式:接口直接获得产品。
2.工厂方法模式:定义一个创建对象的接口,其子类自己决定实例化哪一个工厂类,其创建过程延迟到子类进行。(工厂提车)
3.抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。工厂的工厂。

静态工厂模式是简单工厂模式的一种。

26.在现实生活中,居民身份证号码具有唯一性,居民可以申请身份证号码或补办身份证号码(还是使用原来的身份证号码,不会产生新的号码)。我们可以使用()来模拟实现居民身份证号码办理。
在这里插入图片描述
注意唯一性:单例模式。

27.下面的类图表示的是哪个模式?()
在这里插入图片描述在这里插入图片描述
有factory,肯定是工厂模式的一种。
有这么多工厂:抽象工厂模式。

28.将一个类的接口转换成客户希望的另一个接口。这句话是对下列哪种模式的描述()
在这里插入图片描述
转换成客户希望的另一个接口——兼容——适配器模式。

29.KFC套餐一般包含主食(如汉堡、鸡肉卷等)和饮料(如果汁、可乐等)等组成部分,不同的套餐有不同的组成部分,而KFC的服务员可以根据顾客的要求,一步一步装配这些组成部分,构造一份完整的套餐,然后返回给顾客。可以使用()描述KFC如何创建套餐。
在这里插入图片描述
建造者模式:使用多个简单的对象一步一步构建成一个复杂的对象。(基本部件不怎么变,其组合常变化)。

30.设计模式具有()的优点
在这里插入图片描述
已经适用一个场景,也可以使用另一个场景——为了应付需求的变化。

31.在设计中如果一个对象请求另一个对象调用其方法到达某种目的,而不和请求的对象直接打交道,这种模式是( )。
在这里插入图片描述
命令模式:请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。适合要对行为进行"**记录、撤销/重做、事务"**等处理的使用场景。

32.如果需要在不影响其他对象的情况下,以动态,透明的方式给对象添加职责,应该选择何种设计模式?
在这里插入图片描述
不影响其他对象的情况下添加职责——装饰器模式创建装饰类,在里面新增职责不会影响到原来的类。

33.下图描述了一种设计模式,该设计模式不可以()
在这里插入图片描述
责任链模式:
在这里插入图片描述
A,D选项肯定对。
C选项:多个对象都有机会处理请求,知道有对象处理请求。
B选项:应该是错在高效处理上了。

34.下面不属于创建型模式的有()
在这里插入图片描述
创造型模式:
1.工厂模式
2.抽象工厂模式
3.单例模式
4.建造者模式
5.原型模式:是用于创建重复的对象,同时又能保证性能。

35.用户已经有一个两相插座,最的又买了一个三相插座。现在用户想使用新的三相插座来使用三相的洗衣机和二相插座的电视机,这种问题可以使用()模式来进行设计。
在这里插入图片描述
想让二者兼容——适配器模式。

36.假设猫是老鼠和狗的观察目标,老鼠和狗是观察者,猫叫老鼠跑,狗也跟着叫,可以使用( )描述该过程。
在这里插入图片描述
猫是观察目标,猫叫其余的也叫——观察者模式。

37.Strategy(策略)模式的意图是:()
在这里插入图片描述

38.以下哪个模式可以利用一个对象,快速地生成一批对象?()
在这里插入图片描述
注意快速和给定一个对象。
原型模式:是用于创建重复的对象,同时又能保证性能。(快速克隆)

39.设计模式一般用来解决什么样的问题()
在这里插入图片描述
适应需求变化——同一问题的不同表象。

40.现在大多数软件都有撤销(Undo)的功能,快捷键一般都是Ctrl+Z。这些软件可能使用了()模式来进行。
在这里插入图片描述
41.行为类模式使用( )在类间分派行为。
在这里插入图片描述
42.某高校奖励审批系统可以实现教师奖励和学生奖励的审批(AwardCheck),如果教师发表论文数超过10篇或者学生论文超过2篇可以评选科研奖,如果教师教学反馈分大于等于90分或者学生平均成绩大于等于90分可以评选成绩优秀奖。奖励审批系统可以使用()设计该系统,以判断候选人集合中的教师或学生是否符合某种获奖要求。
在这里插入图片描述
虽然方法差不多,但是学生和老师是不同的访问者,所以选访问者模式。

43.()模式的关键是将一个对象定义为原型,并为其提供复制自己的方法。
在这里插入图片描述
题目里说:原型。

44. 以下哪些问题通过应用设计模式不能够解决()
在这里插入图片描述
功能正确实现还是要测试一下的。

45.()将抽象部分与它的实现部分分离,使它们都可以独立地变化。
在这里插入图片描述
抽象和实现分离——桥接模式。

46.下图的UML类结构图表示的是哪种设计模式?
在这里插入图片描述
HandleRequest——责任链模式。
在这里插入图片描述

47.论坛权限控制设计:在一个论坛中已注册用户和游客的权限不同,已注册的用户拥有发帖、修改自己的注册信息、修改自己的帖子等功能;而游客只能看到别人发的帖子,没有其他权限。使用( )来设计该权限管理模块。
在这里插入图片描述
在这里把外观当成装饰器模式了。
装饰器模式为了增强功能(新增),代理模式为了加以控制。

48.下列描述中,哪些是外观模式的特点( )
在这里插入图片描述
外观模式是为了解决紧耦合问题好吧,所以B错了。

49.以下设计模式的应用场景中,属于代理模式的选项有()
在这里插入图片描述
菜鸟教程解释的挺清楚:
在这里插入图片描述

50.策略模式的结构中包括三种角色上下文、具体策略和抽象策略。抽象策略角色是一个( )
在这里插入图片描述
在这里插入图片描述
抽象策略是接口,具体策略实现抽象策略接口。

51.设计模式在实际程序设计过程中应用很广泛,例如微软著名的MFC框架就广泛的使用了模板模式,而浏览器、office等插件开发基本上都使用了策略模式,下面关于模板模式和策略模式说明错误的是( )
在这里插入图片描述
B选项是对的,模板方法模式是继承实现的,策略模式是组合实现的。
D选项错在通过继承实现,接口肯定是实现而非继承。

52.打印池在操作系统中是一个用于管理打印任务的应用程序,通过打印池用户可以删除、中止或者改变打印任务的优先级。我们可以使用()来模拟实现打印池的设计
在这里插入图片描述
池一般只有一个,所以单例模式。

刷完啦~对设计模式的了解还是比较浅薄,浮于表面。
在这里插入图片描述

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值