java设计模式选择题复习题

上传人:xmg****18 文档编号:121223417 上传时间:2020-02-19 格式:DOC 页数:30 大小:138KB
返回 下载 相关 举报
java设计模式选择题复习题_第1页
第1页 / 共30页
java设计模式选择题复习题_第2页
第2页 / 共30页
java设计模式选择题复习题_第3页
第3页 / 共30页
java设计模式选择题复习题_第4页
第4页 / 共30页
java设计模式选择题复习题_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《java设计模式选择题复习题》由会员分享,可在线阅读,更多相关《java设计模式选择题复习题(30页珍藏版)》请在金锄头文库上搜索。

1、.专业整理.工厂系列模式的优缺点:1. 让用户的代码和某个特定类的子类的代码解耦用户不必知道它所使用的对象是怎样创建的,只需知道该对象有哪些方法2. 抽象工厂模式可以为用户创建一系列相关的对象,使用户和创建这些对象的类脱耦MVC模式是不是一种设计模式?为什么 MVC不是设计模式,应该是框架/架构模式,因为它的定义是抽象的,没有足够的细节描述使你直接去实现,而只能根据MVC的概念和思想,用几个设计模式组合实现。举出一个生活中使用装饰者模式的例子,用程序实现思路举个生活中的例子,俗话说“人在衣着马在鞍”,把这就话用装饰者模式的语境翻译一下,“人通过漂亮的衣服装饰后,男人变帅了,女人变漂亮了;”。对

2、应 上面的类图,这里人对应于ConcreteComponent,而漂亮衣服则对应于ConcreteDecorator;设计模式如何分类,每一个类别都有什么特征?设计模式分为3类,分别是:创建型模式、行为型模式、结构型模式。创建型特点:避免用户直接使用new运算符创建对象。行为型特点:怎样合理的设计对象之间的交互通信,以及怎样合理的为对象分配职结构型特点:主要用于处理类或对象的组合Java jdk中使用了哪些设计模式1.单例2.静态工厂3.工厂方法4.抽象工厂5.构造者6.原型7.适配器8桥接9.组合10.装饰器11.外观12.享元14.代理15.迭代器16.观察者17.协调者18.模板方法19

3、.策略20.责任链21.命令22.空对象25.解释器面向对象的设计原则有哪些?开闭原则、面向抽象的原则(依赖倒转原则)、多用组合少用继承原则、高内聚-低耦合原则。观察者模式的推拉有什么不同?使用场景推,具体主题将变化后的数据全部交给具体观察者。场景:当具体主题认为具体观察者需要这些变换后的数据时,往往采用推数据方式;拉,具体主题不将变化后的数据交给具体观察者,而是提供获得这些数据的方法。场景:当具体主题不知道具体观察者是否需要这些变换后的数据时,往往采用拉数据的方式。策略模式和工厂模式有什么不同?策略模式定义了一系列算法,将他们一个个封装,并且他们之间可以相互替换;工厂模式定义一个创建对象的接

4、口,让子类决定实例化哪一个类5观察者模式的推拉有什么不同?适用场景 现在要说的分歧在这里:“推”的方式是指,Subject维护一份观察者的列表,每当有更新发生,Subject会把更新消息主动推送到各个Observer去。“拉”的方式是指,各个Observer维护各自所关心的Subject列表,自行决定在合适的时间去Subject获取相应的更新数据。 “推”的好处包括:1、高效。如果没有更新发生,不会有任何更新消息推送的动作,即每次消息推送都发生在确确实实的更新事件之后,都是有意义的。2、实时。事件发生后的第一时间即可触发通知操作。3、可以由Subject确立通知的时间,可以避开一些繁忙时间。4

5、、可以表达出不同事件发生的先后顺序。缺点:精确性较差,不能保证能把信息送到客户器。“拉”的好处包括:1、如果观察者众多,Subject来维护订阅者的列表,可能困难,或者臃肿,把订阅关系解脱到Observer去完成。2、Observer可以不理会它不关心的变更事件,只需要去获取自己感兴趣的事件即可。3、Observer可以自行决定获取更新事件的时间。4、拉的形式可以让Subject更好地控制各个Observer每次查询更新的访问权限。缺点:不能够及时获取系统的变更。6策略模式和工厂模式有什么不同?一般情况下,策略模式是为了解决的是策略的切换与扩展,更简洁的说是定义策略族,分别封装起来,让他们之间

6、可以相互替换,策略模式让策略的变化独立于使用策略的客户。可以应用的场景有优惠系统、工资计算系统等。而工厂模式主要解决的是资源的统一分发,将对象的创建完全独立出来,让对象的创建和具体的使用客户无关。主要应用在多数据库选择,类库文件加载等。很明显的是策略模式是开放的,作为一个主体你的活动范围是全程的,大多数事情要你自己亲力亲为。而工厂模式作是封闭的,作为主体的你的活动范围是有限的,很多事情都帮组你做好了,你直接“点”就可以了。7装饰者模式和适配器模式的比较1.关于新职责:适配器也可以在转换时增加新的职责,但主要目的不在此。装饰者模式主要是给被装饰者增加新职责的。2.关于原接口:适配器模式是用新接口

7、来调用原接口,原接口对新系统是不可见或者说不可用的。装饰者模式原封不动的使用原接口,系统对装饰的对象也通过原接口来完成使用。(增加新接口的装饰者模式可以认为是其变种-“半透明”装饰者)3.关于其包裹的对象:适配器是知道被适配者的详细情况的(就是那个类或那个接口)。装饰者只知道其接口是什么,至于其具体类型(是基类还是其他派生类)只有在运行期间才知道。8为什么要用设计模式,设计模式有哪些优点设计模式的优点:1、设计模式融合了众多专家的经验,并以标准的形式给广大群众使用,她提供了一中通用的设计词汇,和一种通用的设计语言,以方便开发人员之间开发和交流,使得设计方案更加通俗易懂;2、设计模式使人们可以方

8、便简单的复用设计模式;3、设计模式是设计方案易于修改;4、设计模式的使用将提高软件开发效率与质量,节约成本;5、设计模式有助于初学者理解面向对象的思想。9学过的每一种模式的适用场景和优缺点职责链模式优点:1. 将请求的发送者和接收者解耦2. 可以简化你的对象,因为它不需要知道链的结构3. 通过改变链内的成员或调动他们的次序,允许你动态地新增或删除责任缺点:1. 并不保证请求一定会被执行,如果没有任何对象处理它的话,它可能会落到链尾端之外2. 可能不容观察运行时的特征,有碍于除错。用途:经常被使用在窗口系统中,处理鼠标和键盘之类的事件。当算法牵涉到一种链型运算,而且不希望处理过程中有过多的循环和

9、条件选择语句,并且希望比较容易的扩充文法,可以采用职责链模式。1)有多个对象处理请求,到底怎么处理在运行时确定。2)希望在不明确指定接收者的情况下,向多个对象中的一个提交请求。3)可处理一个请求的对象集合应该被动态指定。典型例子:一个请求发送给前台,前台表示我无权管理,将请求传递给财务部门,财务部门再简单工厂模式优点:工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的明确了各自的职责和权利,有利于整个软件体

10、系结构的优化。缺点:由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利;用途:工厂类负责创建的对象比较少;客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。经典例子:没啥好说的,这不是一个真正的设计模式策略模

11、式优点:1. 提供了一种替代继承的方法,而且保持了继承的优点,比继承更独立(算法独立,可以任意扩展)2. 避免程序使用多重条件转移语句,使系统更灵活,并易于扩展3. 遵守大部分常用设计原则,高内聚,低耦合缺点:1. 每个具体策略类都会产生一个新类,所以会增加系统需要维护的类的数量。可以使用工厂方法来解决。用途:各个不同地区不同的纳税方法,HF中不同鸭子的方法。有多种鸭子,每个鸭子都有自己的行为,fly,quaak之类的。行为有行为类,继承同一接口实现不同操作,以此实现算法互换。装饰模式优点:1. 装饰模式与继承关系的目的都是要扩展对象的功能,但是装饰模式可以提供比继承更多的灵活性。2. 通过使

12、用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。3. 有着比继承更加灵活的特性缺点:由于使用装饰模式,可以比使用继承关系需要较少数目的类。使用较少的类,当然使设计比较易于进行。但是,在另一方面,使用装饰模式会产生比使用继承关系更多的对象。更多的对象会使得查错变得困难,特别是这些对象看上去都很相像。用途:当需要给一个类添加新的行为的时候,但基于开闭原则,就使用装饰模式。经典例子:我穿衣服使用draw()方法,在我穿好衣服后,我还打算再寄领带,而寄领带就是装饰类,我们可以把装饰类和对象(穿衣服类)继承于同一个接口,在装饰类的draw()方法中调用super.draw

13、(),然后再在这个方法里加上自己的特征。工厂方法模式优点:1. 良好的封装性,代码结构清晰。一个对象创建是有条件约束的,如一个调用者需要一个具体的产品对象,只要知道这个产品的类名(或约束字符串)就可以了,不用知道创建对象的艰辛过程,减少模块间的耦合。2. 工厂方法模式的扩展性非常优秀。在增加产品类的情况下,只要适当地修改具体的工厂类或扩展一个工厂类,就可以完成“拥抱变化”。例如在我们的例子中,需要增加一个棕色人种,则只需要增加一个BrownHuman类,工厂类不用任何修改就可完成系统扩展。3. 屏蔽产品类。这一特点非常重要,产品类的实现如何变化,调用者都不需要关心,它只需要关心产品的接口,只要

14、接口保持不表,系统中的上层模块就不要发生变化,因为产品类的实例化工作是由工厂类负责,一个产品对象具体由哪一个产品生成是由工厂类决定的。在数据库开发中,大家应该能够深刻体会到工厂方法模式的好处:如果使用JDBC连接数据库,数据库从MySql切换到Oracle,需要改动地方就是切换一下驱动名称(前提条件是SQL语句是标准语句),其他的都不需要修改,这是工厂方法模式灵活性的一个直接案例。4. 工厂方法模式是典型的解耦框架。高层模块值需要知道产品的抽象类,其他的实现类都不用关心,符合迪米特原则,我不需要的就不要去交流;也符合依赖倒转原则,只依赖产品类的抽象;当然也符合里氏替换原则,使用产品子类替换产品

15、父类,没问题!缺点:待补充用途:第一种情况是对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来。Java Collection中的iterator() 方法即属于这种情况。第二种情况,只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂的决定权在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给使用者,而这个决策过程这对于使用者来说是透明的。典型例子:车子继承vehicle(车)类,有小汽车卡,公交车bus等,车子工厂实现工厂接口,工厂接口有抽象方法vehicle produce vehicle(String type)方法,车子工厂中实现工厂方法vehicle produce vehicle(String Type),方法中根据需要new新的车子。观察者模式优点:1. 观察者和被观察者之间是松耦合的,分别可以各自独立改变。2. Subject在发送广播通知的时候,无须指定具体的Observer,Observer可以自己决定是否要订阅Subject的通知。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号