级设计模式期末复习材料完整.pdf_第1页
级设计模式期末复习材料完整.pdf_第2页
级设计模式期末复习材料完整.pdf_第3页
级设计模式期末复习材料完整.pdf_第4页
级设计模式期末复习材料完整.pdf_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章 1、设计模式的四个基本要素:模式名称、问题、解决问题、效果 2、什么是设计模式?设计模式是对被用来在替丁场景下解决一般设计问题的类和相互 通信的对象的描述。 3、描述设计模式的统一格式(了解):模式名和分类、意图、别名、动机、适用性、 结构、参与者、协作、效果、实现、代码示例、已知应用、相关模式。 4、设计模式划分的准则:第一是目的准则,即模式是用来完成什么工作。模式依据其 目的可分为创建型创建型、结构型结构型、行为型行为型三种。第二是范围标准,指定模式主要是用于类 还是用于对象。 5、设计模式遵循的原则(7 个):单一职责原则、开闭原则、里式代换原则、依赖倒 转原则、接口隔离原则、合成复用原则、迪米特法则 6、开闭原则:软件实体应当对扩展开放对扩展开放,对修改关闭。对修改关闭。 第三章 1、创建型模式包括(5 个):ABSTRACT FACTORY(抽象工厂)、BUILDER(生成器)、 FACTORY METHOD(工厂方法)、PROTOTYPE(原型)、SINGLETON(单件) 2、工厂设计模式包含:简单工厂、抽象工厂、工厂方法模式 3、ABSTRACT FACTORY(抽象工厂)(抽象工厂)对象创建型模式对象创建型模式 意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的 类。 适用性: 一个系统要独立于它的产品的创建、组合和表示时。 一个系统由多个产品系列中的一个来配置时。 当你要强调一系列相关的产品对象的设计以便进行联合使用时。 当你提供一个产品类库,而只想显示它们的接口而不是实现时。 参与者: AbstractFactory(WidgetFactory)声明一个创建抽象产品对象的操作接口。 ConcreteFactory(MotifWidgetFactory,PMWidgetFactory)实现创建具体产品对 象的操作。 AbstractProduct(Windows,ScrollBar)为一类产品对象声明一个接口。 ConcreteProduct(MotifWindows,MotifScrollBar)定义一个将被相应的具体工厂 创建的产品对象,AbstractFactory 接口。 Client仅使用由 AbstractFactory 和 AbstractProduct 类声明的接口。 优缺点:它分离了具体的类。它使得易于交换产品系列。它有利于产品的 一致性。难以支持新品种类的产品。 4、FACTORY METHOD(工厂方法)(工厂方法)对象创建型模式对象创建型模式 意图: 定义一个用于创建对象的接口, 让子类决定实例化哪一个类。 Factory Method 使一个类的实例化延迟到其他类。 适用性: 当一个类不知道它所必须创建的对象的类的时候。 当一个类希望它由它的子类来指定它所创建的对象的时候。 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮 助子类是代理者这一信息局部化的时候。 参与者: Product(Document)定义工厂方法所创建的对象的接口。 ConcreteProduct(MyDocument)实现 Product 接口。 Creator(Application)声明工厂方法,该方法返回一个 Product 类型的对象。 Creator也可以定义一个工厂方法的缺省实现, 他返回一个缺省的ConcreteProduct对象。 可以调用工厂方法以创建一个 Product 对象。 ConcreteCreator(MyApplication)重定义工厂方法已返回一个 ConcreteProduct 实例。 5、创建型模式的讨论:p89 第四章 1、结构型模式包括:ADAPTER(适配器)、BRIDGE(桥接)、COMPOSITE(组成)、 DECORATOR(装饰)、FACADE(外观)、FLYWEGHT(享元)、PROXY(代理)。 2、ADAPTER(适配器)(适配器)类对象结构型模式类对象结构型模式 意图:将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本 由于接口不兼容而不能一起工作的那些类可以一起工作。 适用性: 你想使用一个已经存在的类,而它的接口不符合你的需求。 你想创建一个可以复用的类, 该类可以与其他不相关的类或不可预见的类 (即 那些接口可能不一定兼容的类)协同工作。 (仅适用于对象 Adapter)你想使用一些已经存在的子类,但是不可嫩对每一 个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。 参与者: Target(Shape)定义 Client 使用的与特定领域相关的接口。 Client(DrawingEditor)与符合 Target 接口的对象协同。 Adaptee(TextView)定义一个已经存在的接口,这个接口需要适配。 Adapter(TextShape)对 Adaptee 的接口与 Target 接口进行适配。 3、COMPOSITE(组合)(组合)对象结构型模式对象结构型模式 意图:将对象组合成树形结构以表示“部分整体”的层次结构。Composite 使 得用户对单个对象和组合对象的使用具有一致性。 适用性: 你想表示对象的部分-整体层次结构。 你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中 的所有对象。 参与者: Component(Graphic)为组合中的对象声明接口;在适当的情况下,实现 所有类共有接口的缺省行为;声明一个接口用于访问和管理 Component 的子组件; (可选)在递归结构中定义一个接口,用于访问一个父部件,并在合适的情况下实 现它。 Leaf(Rectangle、Line、Text 等)在组合中表示叶节点对象,叶节点没有子 节点;在组合中定义图元对象的行为。 Composite(Picture)定义有子部件的那些部件的行为;存储子部件;在 Component 接口中实现与子部件有关的操作。 Client通过 Component 接口操纵组合部件的对象。 4、DECORATOR(装饰)(装饰)对象结构型模式对象结构型模式 意图:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator 模式相比生成子类更为灵活。 适用性: 在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。 处理那些可以撤销的职责。 当不能采用生成子类的方法进行扩充时。一般情况是,可能有大量独立的扩 展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情 况可能是因为类定义被隐藏,或类定义不能用于生成子类。 参与者: Component(VisualComponent)定义一个对象接口,可以给这些对象动态 地添加职责。 ConcreteComponent(TextView):定义一个对象,可以给这个对象添加一些职 责。 Decorator维持一个指向 Component 对象的指针,并定义一个与 Component 接口一致的接口。 ConcreteDecorator(BorderDecorator,ScrollDecorator):向组件添加职责。 5、结构型模式讨论: (1)适配器与桥接的区别(理解背诵):)适配器与桥接的区别(理解背诵): 适配器模式和桥接模式都是间接引用对象,因此可以使系统更灵活,在实现上都涉 及从自身以外的一个接口向被引用的对象发出请求。 两种模式的区别在于使用场合的不同,适配器模式主要解决两个已经有接口间的 匹配问题,这种情况下被适配的接口的实现往往是一个黑匣子。我们不想,也不能修 改这个接口及其实现。同时也不可能控制其演化,只要相关的对象能与系统定义的接 口协同工作即可。适配器模式经常被用在与第三方产品的功能集成上,采用该模式适 应新类型的增加的方式是开发针对这个类型的适配器, 桥接模式则不同,参与桥接的接口是稳定的,用户可以扩展和修改桥接中的类, 但是不能改变接口。桥接模式通过接口继承实现或者类继承实现功能扩展。 按照 GOF 的说法,桥接模式和适配器模式用于设计的不同阶段,桥接模式用于设计 的前期,即在设计类时将类规划为逻辑和实现两个大类,是他们可以分别精心演化; 而适配器模式用于设计完成之后,当发现设计完成的类无法协同工作时,可以采用适 配器模式。然而很多情况下在设计初期就要考虑适配器模式的使用,如涉及到大量第 三方应用接口的情况。 (2)适配器模式与外观模式的关系(理解背诵):)适配器模式与外观模式的关系(理解背诵): 适配器模式与外观模式有些相似,都是对现存系统的分装。但这两种模式的意图完 全不同,前者使现存系统与正在设计的系统协同工作,而后者则为显存系统提供一个 更为方便的访问接口。简单的说,适配器模式为事后设计,而外观模式则必须事前设 计,因为系统依赖于外观。总之,适配器模式没有引入新的接口,而外观模式则定义 了一个全新的接口。 适配器模式用于粒度较小的功能集成,如使用权威部门所固定的无法修改并替换的 现有算法模块,将来也可能升级,这时可以使用适配器模式。 外观模式的使用有时比较难把握,外观接口的定义与设计人员对业务的理解程度有 很大的关系。如果接口设计过于复杂,则不如直接调用原系统简单;如果接口设计过 于简单,有些功能需要调用原有系统才能实现,同样达不到分装的目的。在这种情况 下,首先要考虑被封装系统的稳定程度。如果系统处于演化阶段,那么接口定义需要 复杂一些,以暴露更多的接口。这时,外观模式更像一个大粒度的适配器。被封装的 系统发生演化时,需要新的外观对象,而这个外观对象起到了适配器的作用。 适配器模式经常用在需要第三方 API 协同工作的场合,在功能集成需求越来越多的 今天,这种模式的使用频度越来越高,特别是桥接模式与适配器模式的组合在设计中 越来越频繁的出现,几乎成为一种新的设计模式。 外观模式是另一个在系统演化中常用的模式,在某些情况下,它与适配器模式的作 用有些相似,但总体上来说,外观模式所针对的对象粒度更大。 第五章 1、 行为模式包括: CHAIN OF RESPONSIBIL ITY (职责链) 、 COMMAND (命令) 、 INTERPRETER (解释器)、ITERATOR(迭代器)、MEDIATOR(中介者)、MEMENTO(备忘录)、 OBSERVER(观察者)、STATE(状态)、STRATEGY(策略)、TEMPLATE METHOD(模板 方法)、VISITOR(访问者)。 2、OBSERVER(观察者)(观察者)对象行为型模式对象行为型模式 意图:应以对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所 有依赖于它的对象都得到通知并被自动更新。 适用性: 当一个抽象模型有两个方面,其中一个方面依赖于另一方面。将这二者封装在独 立的对象中以使它们可以各自独立地改变和复用。 当对象的改变需要同时改变其它对象,而不知道具体有多少对象有待改变。 当一个对象必须通知其他对象,而它又不能假定其它对象是谁。换言之,你不希 望这些对象时紧密耦合的。 参与者: Subject(目标)目标知道它的观察者。可以有任意多个观察者观察同一目标; 提供注册和删除观察者对象的接口。 Observer(观察者)为那些在目标发生改变时需获得通知的对象定义一个更新 接口。 ConcreteSubject(具体目标)将有关状态存入各 ConcreteObserver 对象;当它 的状态发生改变时,向它的各个观察者发出通知。 ConcreteObserver(具体观察者)维护一个指向 ConcreteSubject 对象的引用; 存储有关状态,这些状态应与目标的状态保存一致;实现 Observer 的更新接口以使自 身状态与目标的状态保持一致。 3、STRATEGY(策略)(策略)对象行为型模式对象行为型模式 意图:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本 模式使得算法可独立于使用它的客户而变化。 适用性: 许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来 配置一个类的方法。 需要使用一个算法的不同变体。例如,你可能会定义一些反映不同的空间/时间 权衡的算法。当这些变体实现为一个算法的类层次时,可以使用策略模式。 算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相 关的数据结构。 一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式 出现。将相关的条件分支移入它们各自的 Strategy 类中以代替这些条件语句。 4、TEMPLATE METHOD(模板方法)(模板方法)类行为型模式类行为型模式 意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步 骤。 适用性: 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。 各子类中公共的行为应被提出来并集中到一个公共父类中以避免代码重复。这是 Opdyke 和 Johnson 所描述过的“重分解以一般化”的一个很好的例子。首先识别现有 代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操 作的模板方法来替换这些不同的代码。 控制子类扩展。模板方法只在特定点调用“hook”操作,这样就只允许在这些点 进行扩展。 参与者: AbstractClass(抽象类,如 Application)定义抽象的原语操作,具体的子类将重 定义它们以实现一个算法的各步骤;实现一个模板方法,定义一个算法的骨架。该模 板方法不仅调用原语操作,也调用定义在 AbstractClass 或其他对象中的操作。 ConcreteClass(具体类,如 MyApplication)实现原语操作以完成算法中与特定 子类相关的步骤。 5、行为模式的讨论: 补充:补充: 1、PROXY(代理)对象结构型模式 意图:为其他对象提供一种代理以控制对这个对象的访问。 适用性: 远程代理,为一个对象在不同的地址空间提供局部代表。 虚代理,根据需要创建开销很大的对象。 保护代理,控制对原始对象的访问。 智能指引,取代了简单的指针,它在访问对象时执行一些附加操作。 2、CHAIN OF RESPONSIBIL ITY(职责链)对象行为型模式 意图:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦 合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它 为止。 适用性: 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。 你现在不明确指定接受者的情况下,向多个对象中的一个提交一个请求。 可处理一个请求的对象集合应被动态指定。 期中考卷子期中考卷子 1、试阐述开-闭原则及其优点; 所谓开放封闭原则就是软件实体应该对扩展开发,而对修改封闭。 优点:按照开放-封闭原则设计出来的系统,降低了程序各部分之间的耦合性,其适 应性、灵活性、稳定性都比较好。当已有软件系统需要增加新的功能时,不需要对作 为系统基础的抽象层进行修改,只需要在原有基础上附加新的模块就能实现所需要添 加的功能。增加的新模块对原有的模块完全没有影响或影响很小,这样就无须为原有 模块进行重新测试。 2、何谓设计模式?设计模式的目标? 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总 结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 3、假设你现在是一家快餐店的的管理者,要给顾客提供一系列的食品,如鸡翅、鸡腿等, 顾客每要求一种食品,快餐店应当很快“生产”出来。请采用工厂模式来实现这个过 程,用 C#或者 JAVA 语言编写相应的类代码。 /抽象的 KFC 食品,Product 角色 public abstract class KFCFood public abstract void show(); /下面两个类表示两种具体的 KFC 食品,它们继承了抽象的 KFC 食品 Concrete Product1 角 色 public class Chicken: KFCFood public override void show() Console.WriteLine(“鸡腿+1”); /Concrete Product2 角色 public class Wings: KFCFood public override void show() Console.WriteLine(“鸡翅+1”); /产品工厂,Factory 角色 interface IKFCFactory KFCFood CreatFood(); /鸡翅膀工厂,ConcreteFactory 角色 public class WingsFactory: IKFCFactory public KFCFood CreateFood() return new Wings(); /鸡腿工厂,ConcreteFactory 角色 public class ChickenFactory: IKFCFactory public KFCFood CreateFood() return new Chicken(); Static void Main(String args) /定义一个鸡腿工厂 IKFCFactory factory=new ChickenFactory() /生产鸡腿 KFCFood food1=factory.CreateFood();food1.show(); /生产鸡腿 KFCFood food2=factory.CreateFood();food2.show(); /生产鸡腿 KFCFood food3=factory.CreateFood();food3.show();Console.Read(); 4、请回答以下关于装饰模式的问题: (1)装饰模式中包含哪四种角色?相互之间如何协作? 抽象构件(Component) 具体构件(ConcreteComponent) 抽象装饰类(Decorate) 具体装饰类(ConcreteDecorate) (2)装饰模式能解决哪一类软件设计问题? 在不影响其他对象的情况下,以动态、透明的方式给一个对象增加额外职责,与继 承相比更加灵活,并且能够处理那些可以撤销的职责 (3)咖啡店为了进一步满足顾客的口味,允许顾客可以在普通咖啡中自由地加入 多种配料(包括加糖、加奶、加冰等)。咖啡店规定:普通咖啡 5 元一杯,加糖多收 1 元,加奶多收 2 元,加冰多收 1 元。使用装饰模式设计的类图如下所示: (1) 若 ICoffee 接口与 Coffee 类定义如下, 请编写出 CoffeeDecorator 类的完整代码。 public interface ICoffee double getPrice(); public class Coffee implements ICoffee Override public double getPrice() return 5; Public abstract class CoffeeDecorator implements ICoffee Pr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论