`
xyheqhd888
  • 浏览: 409282 次
  • 性别: Icon_minigender_1
  • 来自: 秦皇岛
社区版块
存档分类
最新评论

操作型模式简介

阅读更多

   我们只有弄清楚诸如算法、多态性、方法和操作等术语的不同意义,才能够准确地理解众多设计模式中所涉及的重要概念。特别是State模式、Strategy模式以及Interpreter模式,都需要跨越几个类的方法来实现一个操作;但是,只有当我们对方法和操作的含义达成了共识,这样的表述才具有意义。

 

1   操作和方法

    在有关类的众多术语中,尤其需要注意区分操作和方法这两个概念。UML用下面的定义给出了操作和方法之间的不同之处:

(1)操作就是能够被类实例调用的服务的规范

(2)方法则是操作的实现

注意,操作是在方法之上的抽象概念

     操作定义类所提供的服务,并给出调用该服务的接口。多个类可以用不同的方式实现同一个操作。例如,很多类都以自己的方式实现toString()操作。而每个类都是通过实现方法来提供某种操作,操作的实现代码构成了类的方法。

     通过对方法和操作进行定义,我们可以澄清很多设计模式的结构。操作的含义是从方法的概念上抽象而来的。由于设计模式也是从类和方法升华而来,因而,在很多设计模式中,操作都发挥着非常重要的作用。例如,在Composite模式中,一个操作即被应用于叶节点对象上,又被应用于组合对象上。而在proxy模式中,一个中介者对象与目标对象具有相同操作,从而使得中介者对象可以管理对目标对象的访问。

 

突破题:请使用单词”操作“和”方法“来解释责任链模式是如何实现操作的?

答:责任链模式是在一个对象链上分发某个操作。每个对象的方法要么直接实现该方法的业务,要么将对该方法的调用转发到责任链上的下一个对象。

 

   方法声明包括方法头和方法体。方法体是可以通过调用返回方法签名完成动作的指令集合。方法头包含方法返回类型和签名,也许还包括修饰符以及异常抛出语句。方法头形式如下:

修饰符   返回类型  方法签名  throws子句

 

2.签名

 表面上,操作的含义与签名的含义很类似。两个词指的都是方法的接口。当编写方法时,遵循签名就可以调用之。

 

 方法签名包括方法名、形式参数和数目和类型。

 

 注意,方法签名不包括返回类型。但是,如果一个方法重写了另一个方法,而这两个方法的返回类型不同,那么在编译时会报错。

 

突破题:方法Bitmap.clone()返回Object对象,即使该方法始终返回Bitmap类的实例。请问如果返回类型被声明为Bitmap,代码会编译成功吗?

答:对于Java 5之前的版本:如果打算更改Bitmap.clone()的返回值,这部分代码不会编译成功。clone()签名会匹配Object.clone()的签名,所以返回类型也应该匹配。

     在Java 5中:Java 5语言定义已经修改为允许协变返回类型(covariant return type),子类可以声明更明确的返回类型。

 

     在客户端调用方法时,方法签名指明应该调用哪个方法。操作是可请求的服务的规范。术语签名和操作的含义很类似,但是名字本身并不同义。这两个术语的不同之处主要体现在所使用的上下文环境中。当研究不同类中的方法可能会有相同接口时,使用术语操作。当研究Java如何将一个方法调用映射到接收对象的方法时,使用术语签名。签名依赖于方法名和参数,但不依赖于返回类型。

 

3. 算法和多态性

   在某些情况下,算法也许完全包含在一个方法中,但是算法的实现经常依赖于多个方法的相互作用。

   算法是定义良好的计算过程,把数据值或者数据集合作为输入,并输出某数据值或者数据集合。

 

   算法是个过程---包含一些指令序列,接受输入,产生输出。单个方法也许也是个算法:它接受输入---其参数列表---并产生输出作为返回值。然而,在面向对象编程时很多算法会需要多个方法。比如,Composite模式中的isTree()算法需要4个方法,如下图所示:

 
 

 4个isTree()方法一起实现一个算法,决定MachineComponent的某实例是否是树

 突破题:请问上面图中有多少算法、多少操作、多少方法?

答:上面图中有一个算法--该算法用于判断一个对象模型是否树结构,两个操作---出自MachineComponent类,四个方法。

 

在面向对象应用程序中,需要多个方法的算法经常依赖多态性来允许单个操作的多种实现。多态性是方法调用关于依赖被调用的操作和调用接收者类的基本原则。比如,你也许关心当Java遇到表达式isTree()时,会执行哪个方法。这关键看方法的依赖关系。如果m是Machine类的实例,Java会调用Machine.isTree()。如果m是MachineComposite的一个实例,Java会调用MachineComposite.isTree(),Java会调用Machine.isTree()。如果m是Machine类的实例,非正式地说,多态性意味着要为合适的对象调用合适的方法。很多设计模式都使用多态性,在某些情况下,多态性与该模式的目标紧紧相连。

 

4.小结

  操作、方法、签名和算法这四个概念很容易让人混淆。操作,类似于方法签名,定义了服务的规范。当谈到许多方法可能会有相同接口的时候,我们可以使用操作这个术语。当讨论方法查询规则的时候,我们可以使用签名这个术语。一个方法的定义包括方法签名、修饰符、返回类型以及方法体;而方法签名又包括方法名和参数列表。一个方法通常有一个方法签名,并实现一个操作。

 

  启动一个方法的常见方式是调用它。方法结束的常见方式是让它返回,但是对任何程序而言,当遇到不可处理的异常时,任何方法都会停止执行。

 

  一个算法的过程可能会涉及到很多的方法和操作,也可能仅仅是另外一个方法的一部分。算法这个术语最好谈到产生某个结果的过程时使用。

 

    很多设计模式都把一个操作分散到几个类中去。因而我们也可以说这些模式依赖于多态性,即具体调用哪个方法依赖于收到调用的对象的类型

 

 

6.超载普通操作

  不同的类可以用不同的方式来实现同一个操作。即Java语言支持多态性机制。下面的这几种设计模式都用到了多态性这一功能强大的机制。

如果你期望                                                                可应用模式

在一个方法中定义一个算法。把算法中某些步骤的定义推迟到子类中去重新定义

Template Method模式

各个类都实现一个操作,每个类代表一个不同的状态

State模式

封装一个操作,使其实现可以互相替换

Strategy模式

把方法调用封装在对象中

Command模式

各个类都实现一个操作,对每种不同的组合结构使用不同的操作实现

Interpreter模式

 

   面向操作的设计模式通常应用于下面的情景中:使用多个方法来完成一个设计,而这些方法具有相同的方法签名。例如,在Template Method模式中,子类实现的方法应该能够根据需要对其超类中定义的方法执行效果进行调整。 

 

  • 大小: 3.1 KB
分享到:
评论

相关推荐

    23种设计模式,创建型模式共5种,结构型模式7种,行为型模式11种

    设计模式分为三大类:创建型模式、结构型模式和行为型模式。 **创建型模式**关注的是对象的创建。共有五种创建型模式: 1. **工厂方法模式**:它定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法...

    设计模式-创建型模式、结构型模式和行为型模式

    按照不同的功能特性,设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。 #### 二、创建型模式 创建型模式主要用于解决对象创建的过程,旨在简化对象创建的复杂度,同时保持对象创建的灵活性。主要...

    设计模式之创建型模式实验.docx

    【设计模式之创建型模式实验】 创建型设计模式主要关注对象的创建,它们提供了一种在不指定具体类的情况下创建对象的方式,增强了系统的灵活性和可扩展性。在本实验中,我们将探讨五种常见的创建型设计模式:简单...

    设计模式(创建型、结构型、行为型)

    创建型模式是指在软件设计中,如何创建对象的模式。它主要解决了对象创建的问题,包括简单工厂、工厂方法、抽象工厂、单例、构造者和原型等六种模式。 1. 简单工厂模式:该模式提供了一种封装对象实例化的方式,...

    设计模式之结构型模式

    在众多设计模式中,结构型模式关注如何组织类和对象,以形成更复杂的结构,同时保持良好的设计和代码可维护性。以下是关于“设计模式之结构型模式”的详细解析。 1. **适配器模式**: 适配器模式是一种结构型设计...

    软件设计模式实验1创建型模式源码

    3、某手机操作系统可以根据用户不同的喜好在多种主题之间进行切换,随着主题的变化,系统中的字体、app图标、壁纸、锁屏壁纸等元素会随之发生变化。 (1)请使用抽象工厂模式设计手机主题库 (2)为系统增加一种新的...

    Java设计模式之结构型模式源码以及文档

    今天我们要探讨的是“Java设计模式之结构型模式”。结构型模式主要关注如何组织类和对象,以达到良好的架构,提升代码的可读性和可维护性。在这个主题中,我们将深入理解并讨论这些模式的原理、应用场景及其实现。 ...

    软件设计模式创建型模式实验代码

    包含三个实验,建造者模式(假设生产计算机只需要CPU、内存、显卡、显示器和光驱),抽象工厂模式(某手机操作系统可以根据用户不同的喜好在多种主题之间进行切换,随着主题的变化,系统中的字体、app图标、壁纸、...

    设计模式3-行为型模式

    其中,行为型模式主要着眼于对象间的交互,以及如何有效地分配和管理职责,使软件设计更加灵活、易于扩展和维护。本文将详细介绍行为型设计模式,并深入分析两种典型的行为模式:职责链模式和命令模式。 首先,让...

    C#面向对象设计模式纵横谈-创建型模式

    虽然不是严格意义上的创建型模式,但组合模式与创建型模式密切相关,因为它允许我们构建树形结构的对象。它将简单对象和组合对象以一致的方式处理,使客户端代码可以透明地操作单个元素或整个对象结构。 以上创建...

    软件设计模式作业 创建型设计模式

    某手机操作系统可以根据用户不同的喜好在多种主题之间进行切换,随着主题的变化,系统中的字体﹑app图标﹑壁纸﹑锁屏壁纸等元素会随之发生变化。 (1):请使用抽象工厂模式设计系统。 (2):为系统增加一种新的...

    23种设计模式-结构型模式.docx

    《23种设计模式——结构型模式解析》 设计模式是软件工程中的一种最佳实践,它们是解决常见问题的经验总结,被广泛应用于软件设计中,以提高代码的可读性、可维护性和复用性。在众多的设计模式中,结构型模式尤其...

    c++设计模式-行为型模式-访问者模式

    c++设计模式-行为型模式-访问者模式;qt工程;c++简单源码; 访问者(Visitor)模式的定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新...

    C#面向对象设计模式纵横谈(22):(行为型模式) State 状态模式

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。在C#编程中,这种模式被广泛应用于处理具有多种状态的对象,使得对象的状态转换更加清晰和易于管理。 状态模式的...

    实验2:结构建型模式应用实验(1)

    **代理模式简介**: - **定义**:提供一个代理对象来代表目标对象。这样做的好处是可以增加额外的操作,比如权限检查、缓存、日志记录等,而无需修改原目标对象的代码。 - **特点**:代理模式的核心是在客户端与...

    操作型问题选.docx

    操作型问题是数学教育中一种重要的题型,它旨在考察学生的实践操作能力、空间观念以及问题解决技巧。这类问题通常涉及到作图、图形分割与组合、图形折叠和移动等多个方面,要求学生不仅要有扎实的几何基础知识,还要...

    Java设计模式之创建型模式源码以及文档

    在Java中,设计模式分为三大类:创建型、结构型和行为型模式。本篇主要聚焦于创建型模式,这是一种用来处理对象创建的技术,通过封装、抽象和多态来提供更灵活的实例化过程。 创建型模式包括五种主要类型:单例...

    新版设计模式手册 通俗的例子讲述设计的方法 1创建型模式 2结构型模式 3 行为模式 详细的设计说明

    这个“新版设计模式手册”深入浅出地介绍了设计模式的三大类:创建型模式、结构型模式和行为模式,为开发者提供了一套详细的设计说明。 一、创建型模式 创建型模式主要关注对象的创建过程,它们的目标是使得对象的...

Global site tag (gtag.js) - Google Analytics