答;在任何时间内只有一个类实例存在的模式。需要有一个从中进行全局访问和维护某种类型数据的区域的环境下使用单例模式。解决这个问题的办法是为指示类是否已经实例化的变量提供一个互斥锁。解决方案就是保证一个类只有一个类实例存在。本质就是实例共用同一块内存区域。
3、为什么面向对象的分析和设计中优先使用组合,而非继承?
答: 继承关系有很多缺点,如果合理使用组合则可以有效的避免这些缺点,使用组合关系将系统对变化的适应力从静态提升到动态,而且由于组合将已有对象组合到了新对象中,因此新对象可以调用已有对象的功能。由于组合关系中各个对象的内部实现是隐藏的,我们只能通过接口调用,因此我们完全可以在运行期用实现了同样接口的另外一个对象来代替原对象,从而灵活实现运行期的行为控制。而且使用合成关系有助于保持每个类的职责的单一性,这样类的层次体系以及类的规模都不太可能增长为不可控制的庞然大物。
在下面的C++代码中,类SalesTicket能够完成打印票据正文的功能,阐述采用该设计模式
该代码采用装饰(Decorator)设计模式实现。采用该设计模式的目的能够动态地给一个对象增加一些新的职责不不需要采用生成子类的方法。可以让客户选择给该类对象附加新的功能的时机以及是否增加新职责。比生成子类的方法更为灵活。
主任可以审批1 万元以下的采购单,副董事长可以申批2.5 万元以下的采购单,董事长可以审批10万元以下的采购单,10 万元以上的采购单就需要开会决定。选择设计模式并其类图。 责任链模式:
一、1. 以动作和事务闻名,且以对象形式用来封:B.命令模式 2. 以下不属于创建型模式是 ( A ) PROXY(代理) 3. 以下不属于结构型模式是 ( D ) D. SINGLETON(单例) 4、以下不属于行为型模式是( D ) MEMENTO(备忘录)
5、以下意图那个是用来描述BUILDER(生成器)( B ) 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
6、以下意图那个是用来描述PROTOTYPE(原型)( D )D. 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。
7、以下意图那个是用来描述ADAPTER(适配器)( A )将一个类的接口转换成客户希望的另外一个接口。本模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 8. 以下意图那个是用来描述BRIDGE(桥接)( B )B. 将抽象部分与它的实现部分分离,使它们都可以独立地变化。
9. 以下哪个意图是用来描述COMPOSITE(组合)?( C ) 将对象组合成树形结构以表示部分-整体的层次结构。
10、以下那个是用来描述DECORATOR(装饰)( D ) 动态地给一个对象添加一些额外的职责。 11、以下意图那个是用来描述 FACADE(外观)?( A ) 为子系统中的一组接口提供一个一致的界面,本模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
12、以下意图那个是用来描述FLYWEIGHT(享元)( B )B. 运用共享技术有效地支持大量细粒度的对象。
13、以下意图那个是用来描述 PROXY(代理)( C )C. 为其他对象提供一种代理以控制对这个对象的访问。
14、以下意图那个是用来描述CHAIN OF RESPONSIBILITY(职责链)?( D )D.使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
15、以下意图那个是用来描述 COMMAND(命令)( A )A、将一个请求封装为一个对象;对请求排队或记录请求日志,以及支持可撤消的操作
1. (命令)模式把一个请求或操作封装到一个对象中。
2. (装饰)模式封装一些施加于某种数据结构元素之上的操作,这样修改操作不影响数据
结构。
3. (外观)模式为子系统对外提供的一组接口提供一个统一的界面。
4. (策略)模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使
算法可相互替换。 5. (观察者)模式让多个对象同时监听某一个主题对象,主题对象的变化会通知监听对象,
使得监听对象可以自动更新。
6. (适配器)模式把一个类的接口变换成客户端所期待的另一种接口。 7. (访问者)模式以对客户端透明方式扩展对象的功能。
8. (简单工厂)模式定义一个具体的工厂类来负责创建一些类的实例,而这些被创建的类
应有一个共同的父类。
9. (工厂方法)模式定义一个用于创建对象的接口,让子类决定实例化哪一个类,从而使
一个类实例化延迟到其子类。 10. (抽象工厂类)模式提供了一个创建一系列相关或相互依赖对象的接口,而无需指定他
们具体的类。
三、 判断题(分值15)
1. 如果一个系统的组件是松耦合的,那么此系统设计较为合理。( ) 2. 适配器实现了复杂的接口和客户解耦。( )
3. 典型情况下,使用状态模式将导致较少的类,从而使得代码更易维护和理解。( ) 4. 解释器模式用于解释类似Java和C++这样的语言。( ) 5. 在设计软件系统时,应该尽量减少对象之间的交互。( ) 四、问答题(分值30)
1、简述什么是工厂模式,以及他解决的问题,应用的环境,解决的方案,模式的本质? 定义一个用于创建对象的接口,让子类决定将哪一个类实例化;利用工厂来解决接口选择的问题的模式 ;应用环境:当一个类无法预料要创建哪种类的对象或是一个类需要由子类来指定 创建的对象时,就需要用到工厂模式; 解决方案:定义一个创建对象的接口,让子类来决定具体实例化哪一个类 ;本质就是根据不同的情况来选择不同的接口 2、什么是单一职责原则?
基本思想:SRP使得一个类或一个模块承担的责任尽可能少,是尽可能少的因素的因素或动机影响该类或该模块,即增大类或模块的内聚性,减少其耦合,SRP是所有原则中最简单的之一,也是最难正确运用之一 3、继承和组合各有什么优缺点?
4、MVC中控制器能否看作中介者模式中的中介者?说明理由?
5、代理模式和中介者模式有什么不同?
五、应用题(分值15)
为实现应用的界面与应用数据的分离,一个表格对象和一个柱状图对象可使用不同的表示形式描述同一个应用数据对象的信息。请根据叙述述,选择设计模式,并给出设计模式的类图。 观察者模式