heisaijuzhen

1.抽象定义:抽象表示一个对象区别于其他类别的对象的本质特征,从观察者的角度来看,抽象为其提供了明确的概念边界。

2.封装让代码所表示的对象的各个组成部分集合在一起成为一个真正的对象。

(1)实现封装最简单的方法就是采用私有变量。在ActionScript3.0中,private关键字可以对变量、变量或方法(函数)进行修辞,被private进行修辞后的变量,常量,方法(函数)等职能在定义它们的类的内部使用。这样不仅可能防止在实现这些类的时候对变量进行赋值,也不允许子类直接对它们进行操作。

(2)另一种实现封装,隐藏数据信息的方法是使用ActionScript3.0中的set和set方法。使用set和set方法时最重要的特征就是get和set方法后面没有园括号,设置值得过程不是通过参数来完成的。而是将其看作属性,通过赋值的方法进行存取。

3.接口的函数识别特征包括操作名、函数和返回值类型。通过某个操作定义的对象的所有函数识别特征即为接口。对象的接口由访问规则、服务列表和各种控制组成。

(1)实现接口时,类中可以有任意个方法,但必须实现接口中包含的所有方法,并保持方法原有的结构,这样应用程序才能正确地执行。

(2)实现接口时必须实现接口中的所有方法。这看起来不太像继承,而是将方法本地化的过程。

4.getter和setter方法

(1)最常用的实现对封装的对象进行存取的方法是使用getter和setter接口。对象的控制包括对它的访问及操作。

(2)setter方法有各种类型的参数,其算法只允许接收某些值,不允许接收不合法的值。大多数setter方法仅仅只给类中private变量赋值。在实现过程中,算法及setter方法的其他部分都是不可见的。如果输入错误的参数或错误的类型,就会显示错误的信息,且不会输入的赋值值给变量。

(3)setter方法给对象赋值,保证getter方法能取到想要的值。

5.继承指一个类继承另一个类的属性、方法和事件。

(1)使用extends关键字可以声明父类的子类。被继承的类叫超类(或父类),继承其他类的类叫子类。

(2)继承可以用在另外两种结构中:接口和抽象类。

6.类是对象的抽象,而接口是方法的抽象。

7.面相对象程序设计代码重用的第一原则:编程时使用接口,而不是具体的实现。这样做的目的是保持应用程序的灵活性和代码的可重用性。

8.抽象类和重写继承

(1)在ActionScript3.0中抽象类的使用有一点不同,任何类都不能真正地定义成一个抽象类。ActionScript(以及ECMAScript)中都不包含真正的抽象类。

(2)但是,在ActionScript3.0中可以创建一个和抽象类工作原理相同的类,即创建一个普通类,然后把它当做一个抽象类来对待。和接口一样,抽象类中存在没有直接实现的方法。使用抽象类和实现接口一样,在抽象类的子类中,抽象类的所有抽象方法都将被重写。抽象类中也可以存在已经被实现的方法。

(3)当一个类继承另一个类时,子类继承了超类中所有的方法。在抽象类中,可以不必实现类中的所有方法,生成子类后再实现其中所有的方法。由于抽象的特性,有一些方法没有实现,必须在子类中重写这些方法。使用override关键字可以重写方法中的具体细节,但必须保证方法中的几个识别特征与抽象类中一致,必须保证方法的名字、参数的个数和类型以及返回值与抽象类中的方法完全相同。可以看出,重写抽象类中的方法时,应该按照实现接口中的方法一样进行操作。

(4)子类从抽象类中继承了所有的方法和接口,通过重写抽象类中的方法为方法加入了具体的细节。在子类中没有对抽象类中的具体方法进行重写,也没有对抽象类进行实例化。

(5)应用程序最后实现抽象类中的方法时,声明变量时使用抽象类,但实例化时用具体的子类。

(6)使用抽象类,先要创建抽象类,再创建抽象类的子类。还要在子类中重写抽象类中的抽象方法,最后实现子类。

(7)抽象函数时将一个函数简化为一个没有内容的想法或概念的方式。

9.多态性

(1)多态性即允许有多种形式存在。

(2)一个抽象方法可以采用多种方式实现,这就是多态

10.设计模式最重要的原则有以下两个:

(1)尽量使用接口,而不是具体的实现。

(2)尽量使用对象的组合,而不采用类的继承。

11.状态指对象当前的情况。状态通常用来表示将值传递给某个关键的变量。状态引擎是由状态网络组成的数据结构,通过改变状态来影响整个应用程序的执行。状态设计模式主要关注内部状态变化时整个对象行为的变化。因此状态是创建设计模式的关键概念。总之,状态一词指的是一个对象中变量的当前值。

12.客户端和请求

(1)在Internet和Web时代,客户端指向服务器发送请求的一段。通常使用的形式是客户端/服务器(Client/Server)。请求指调用服务器的某个Web页。

(2)在设计模式中,不使用客户端/服务器的形式,而是使用客户端/对象(Client/Object)的形式。设计模式中的请求指客户端要求对象执行某一操作----运行一个方法。也就是说,请求是让对象执行某一方法的唯一方式。请求之所以是执行某一个操作的唯一方式,是因为不能直接改变已封装的类的内部状态。

(3)简而言之,客户端是向对象中的方法发出请求的源。

(4)通常,客户端通过参数加入具体的细节,但请求还是通过对象的实例来调用对象中的方法。

13

(1)"是"关系:对象的继承

(2)“有”关系:对象的组合。组合指在定义一个类时引用另一个类。

(3)“使用”关系:一个对象使用另一个对象(实例化时不使用继承和组合)

(4)ActionScript3.0不支持多重继承。但ActionScript3.0中的类在继承另一个类的同时可以实现一个接口。

14.委派

(1)因为使用委派,组合不仅可以和继承一样重用代码,而且比继承具有更大的灵活性。

(2)通常情况下,委派和继承是一起使用的,任何时候都不可能将委派和继承区分开来。

15.创建模式

(1)创建模式将对象的使用和创建分离开来,这种分离过程是通过封装来实现的。实体类使用封装的信息,但不知道直接的关于这些信息的任何情况。实体类掩盖了产生和创建实例的过程。

(2)工厂方法模式将对象的创建过程委派给一个称为工厂的方法,从而使客户端和产品的联系不再那么紧密了。单态模式中能且仅能为类创建一个实例。单态模式通常与其他模式联合使用。

16.工厂方法模式

(1)工厂方法模式是一个解决减少客户端与它使用的类之间的依赖的问题方案。

(2)工厂方法模式在客户端与使用它的类之间加入了一个媒介。这个媒介由名为Creator的类来充当,它允许客户端不指定产生对象的类的情况下访问对象。这个访问过程通常将产生对象的过程委派给Creator类中称为factory的方法来完成。

(3)factory方法的主要功能就是实例化对象并返回对象。

(4)工厂方法模式在客户端及它们使用的产品类之间架设了一道防火墙。

(5)有关类的继承的相关信息都封装在相应的创建类中。不能直接访问产品类,只能通过创建类对产品类进行访问。

(6)可以将工厂方法模式看成平行的类的继承的集合:具体的创建类及相应的产品类。这是应用软件中封装信息并管理各种依赖关系的非常好的方法。

(7)工厂方法模式将创建对象和使用对象的过程分离开来。

(8)工厂方法通过在客户端和具体类之间引入一个中间媒介(即创建类)来创建对象。因为创建类将相关的信息封装起来了。客户端不必指出想要使用的对象所属的详细的类名。

(9)总之,工厂方法模式为了让应用程序适应环境的变化,减少了创建对象和使用对象之间的类的联系。

(10)工厂模式没有完全消除两个类之间的依赖关系,它只是提供了一种管理这种依赖关系的架构。

17.抽象类

(1)抽象类不能直接实例化,只能由子类继承。

(2)子类必须实现抽象类中的所有方法。

(3)一般情况下,在抽象类中实现的方法都是默认方法。

(4)抽象类中的大多数方法都没有实现。

(5)如果抽象类的子类实现了所有抽象类中没有实现的方法,可以将这个子类实例化。

(6)采用抽象类时,如果子类需要使用抽象类中实现的默认方法,子类中可以不重写这个方法。

(7)抽象接口能够提供方法的默认的实现方法。也可以将抽象接口叫做抽象类,但不能将抽象实例化,也不能被其他类继承。

18.单态模式

(1)单态模式有两个主要特征

(I)在某一个时刻,类有且仅有一个实例。

(II)类中应该有唯一的全局访问点。

(2)在团队工作过程中,单态模式能保证某个开发人员对类进行实例化之后,其他的开发人员不在对类进行实例化。

(3)使用全局变量并没有限制变量在单个实例的使用。可以在任何地方对类进行实例化,从顶级的包到函数内部都可以进行实例化操作,单个实例必须实现全局访问。

(4)从单态结构的类图中可以看出,单态模式中没有抽象类或接口。类图中要注意的关键点是static Instance()方法的使用及实现伪代码时的连接关系。可以看到,为了达到全局实现及仅有一个实例的目的,模式中采用了静态的类变量。

(5)在AS3.0中不能使用私有的构造函数。创建类时,包内应该有一个公有构造函数。因为在包内不能创建私有类,所以必须在包外创建私有类,然后在包类使用它。

(6)单态模式是处理多个引用指向同一个实例相关问题的很好的工具。

(7)在应用程序中要求有且仅有一个实例时最好使用单态模式。

(8)当开发人员需要唯一的全局访问点及唯一的实例时,通常采用单态类。

(9)使用单态设计模式并不表示应用程序会按照用户期望的方式只创建一个实例,必须采取一定的措施保证单态模式按预想的方式运行。

(10)单态模式的目标非常清楚---有且仅有一个实例并提供一个全局访问点。

19.导入包的简约原则说明从中心集导入包时,只导入需要的部分,而不是导入整个包。internal语句是为了提醒读者能在同一个包中任意地调用这些变量,即使采用默认的方式对其进行实例化。

20.

(1)结构模式指使用类或对象创建更大规模的结构。从某种意义上说,这个过程必须用抽象类作为接口,用派生的类组成更大规模的结构。结构模式使用继承和组合使设计的应用程序更加灵活。类模式经常使用继承的方法产生大规模的结构,对象结构则通常使用组合的方法。

(2)装饰者模式,该模式为对象添加了责任。在对象保持内部结构不变的情况下,用新的功能和属性包装组件。

(3)适配器模式,该模式让两个不同的接口一起工作。当在一个不兼容的结构中加入新对象时,适配器模式是一个可供选择的方案,它可以接收新特征后重建应用程序。

(4)组合模式,它按树型结构组合对象。按这种方式,客户端可以按相同的方法处理单个对象和对象的组合。组合模式中按树型结构组合对象可以使创建复杂的结构变得简单。

21.装饰者模式

(1)装饰者模式就是在保持主要结构不变的同时,通过装饰不同的组件进行跟新和扩展。装饰者由描述或方法组成,这些描述和方法可以包装应用中的不同的对象。

(2)装饰者模式可以在保持主体结构不变的情况下,混合和匹配各种不同组件和装饰,具有很强的灵活性和扩展性。

(3)装饰者模式最重要的特征就是用特殊的装饰方式增加对象的自责。为包装在对象中的组件增加职责时需要遵循以下原则:

(I)装饰者可以出现在组件对象出现的任何位置。

(II)运行过程中,可以根据需要混合和匹配装饰者组合。

(4)装饰者模式解决的最根本的问题是:只给单个对象增加职责,而不是给整个类增加职责。

(5)装饰者模式的类图中有两种主要的元素:组件和装饰者。组件代表被装饰的对象;装饰者是具体装饰者的抽象类。具体的组件是真正被装饰的对象。具体装饰者实现真正的装饰功能。具体的装饰者和具体的组件是同一个父类的子类。

(6)装饰者模式中最重要的一点是:装饰者模式的目的是在不改变类的基本结构的情况下,在类中加入其他的元素。也就是说,保持类不变,用子类来装饰它。

(7)装饰者设计模式能够在不改变类的结构的同事改变类中的方法。

(8)一个简单的装饰者模式包含下面4个部分:

(I)一个抽象组件类

(II)一个抽象装饰者类

(III)一个具体的组件类

(IV)多个具体的装饰者类

模型中所有的类都是抽象组件类的子类。

(9)装饰者设计模式最大的优点就是可以添加多个具体的组件。

(10)装饰者设计模式中的装饰过程是累计的,也就是说,每次添加装饰时,是添加在已包装的具体的组件之上。

(11)每个装饰者将本身的属性与已经有的组件和装饰者的属性组合起来,并拥有属性集合中的所有属性。每次进行装饰时,所有已经存在的属性都被保持下来,但没有被复制,除非多次使用同一个装饰者对组件进行装饰。可以根据需要添加多个装饰者,只要用它们包装已存在的对象即可。

(12)因为装饰者设计模式能够方便地添加或删除具体的组件和装饰者,所以选择装饰者设计模式。

(13)抽象装饰者类中会创建这些属性和方便,以便具体的装饰者继承这些属性。

(14)装饰者设计模式在不改变核心对象基本结构的情况下,为这些对象添加不同的特征。

22.适配器模式

(1)适配器模式的主要目的是为了更有效地利用已有的类。

(2)调整现有的类满足新的要求。这正是适配器模式的功能,它允许客户端按照新的要求转换已有类的接口,从而利用已有的类。

(3)适配器模式最关键的一点是:没有修改已有的类,增加一个具有正确接口的适配器类,它利用已有的类或扩展已有的类提供所需的功能。

23.采用适配器设计模式时应满足以下两个条件:

(I)已有类中的功能可以满足新的要求,但其接口与新要求不匹配。

(II)有满足新要求的目标接口。

如果这两个条件都满足了,就可以使用已有的类创建一个适配器类来实现目标接口。

(3)适配器可以采用两种方式利用已有的类实现新功能。适配器可以使用组合或继承的方式访问已有的类。

(4)如果适配器使用组合方式访问已有的类时,就是对象适配器。对象适配器保存了已有类的实例的访问。因此,对象适配器使用了已有的类。所有的适配器类实现同一个接口。

(5)适配器采用继承的方式使用已有的类时称为类适配器。适配器类扩展已有类时,与已有类之间的关系为“是”。扩展已有的类表示适配器可以继承已有类的属性和方法。从类图中可以看到,实现适配器类要使用多重继承。多重继承是面向对象程序设计的特征,表示一个类有多个超类。

(6)在"四人组"的关于设计模式的相关内容中提到,通常情况下类适配器的一个分支继承接口,另一个分支继承实现。而且在大多数情况下,类适配器采用public的方式继承接口,采用private方式继承实现,这样可以隐藏实现分支,客户端只能看到接口的情况。

(7)如果有一个类提供了所需的功能,但其接口却不能满足当前的需求,这种情况下通常使用适配器。

(8)适配器模式允许使用已有的类,但已有的类并没有直接参与到应用程序中。适配器类使用或扩展已有的代码满足新的需求。适配器模式的主要功能就是转换已有类的接口来满足新的需求。

(9)适配器模式的主要目的和功能和其他几种模式非常相似,如外部模式、装饰者模式和桥接模式。其主要的区别在于,适配器模式要求适配器实现目的接口,实现过程中要求适配器利用或扩展一个已有的类,而且不需要简化已有的接口。

(10)有两种类型的适配器:类适配器和对象适配器。选择适配器类型时主要考虑实现过程中组合和继承的优点和缺点。从中还可以看到接口的重要性,设计者可以通过接口封装实现的细节。

23.组合模式

(1)组合模式提供了由几个小组件创建复杂系统的强健的解决方案。组成系统的组件可以使单个的对象,也可以使收集对象的容器。通常将由其他组件组合而成的组件称为组合对象。组合模式最大的优点就是可以将组合对象当作独立的对象进行操作。

(2)组合模式提供了处理组合结点和叶节点的通用接口。

(3)一个组合对象可以由多种类型的孩子组件构成。

(4)用户端对组合结构进行操作时不必指出究竟是在对组合节点进行操作,还是在对叶节点进行操作,者就是组合模式的特征。

(5)组合模式的特性

组合模式使由多个部分组成的复杂结构的创建和操作过程实现流水化。

(I)按树型结构创建复杂的结构。

(II)结构中的组件可以是个体组件(独立的或单个对象),也可以是包含其他组件的组合组件。

(III)允许客户端按相同的方式处理个体组件(叶节点)和组合组件(组合节点),简化接口。

(6)组合模式中关键的面向对象的概念是多态性。广义的多态性指不同类的对象可以按指定的方式对同一个方法的调用作出响应。这是可以实现的,虽然对象属于不同的类,但方法的特征是相同的,总之,不同类中的方法为客户端提供了相同的接口。

(7)因为组合模式允许客户端使用相同的接口处理叶节点和组合节点,这是多态性的最好的例子。主要是因为叶节点类和组合节点类都继承了抽象组件类来实现同一个组件接口。

(8)组合模式的主要优点是允许客户端通过一个共同的接口采用相同的方式处理独立组件(叶节点)和组合组件(组合节点)。

(9)组合模式在ActionScript中有特殊的作用,因为现实列表已经实现了组合模式,开发者可以利用它轻松地创建各种复杂的显示对象。

24.反向运动学

(1)反向运动学是一种驱动通过关节相互连接的对象,形成各种运动姿态的方法。

(2)反向运动学可以使运动学上的链移动,移动过程中只允许关节处运动。

(3)运动学链最简单的形成是有一个外部能控制的自由端的链。

(4)反向运动学中主要的概念是相互连接的对象之间会相互作用。

(5)运动链由一个或多个动力对组成。

(6)动力学链由动力对组成,动力对指由关节连接的两个原始段。

(7)如何对动力对进行移动和调整呢?其基本的思想是父母段牵动孩子段。

25.行为模式

(1)行为模式主要关注类和对象之间的交互,以及如何给它们分配责任。行为模式主要描述类模式和对象模式,以及类、对象之间的信息交流。

(2)行为模式与其他模式不一样,它通常将任务分配给不同的类或对象来完成。行为模式不是让一个类完成所有的工作,而是将任务进行封装,然后将它们分配给一个类或多个类。因此,行为模式要设计合理的算法在各个对象之间分配认为。

(3)行为模式的关键是通过继承和对象组合分配任务。

(I)模板模式使用一个抽象类表示算法的纲要,然后通过子类完成具体的细节。

(II)命令模式、观察者模式、状态模式和策略模式都是使用对象组合为类和对象分派任务的。

26.命令模式

(1)命令模式指客户端向某个对象发送请求,发送请求时没有关于请求和接收者的任何假设条件。可以认为请求时向对象发送的完成某个特定任务的命令。

(2)实现命令模式最简单的方式是创建对象的实例,然后调用完成命令(或行为)的方法。

(3)命令模式的主要特征

命令模式的主要功能是定义应用程序的行为时提高应用程序的灵活性和可扩展性。

(I)命令模式在一个简单的命令对象中封装行为。

(II)命令模式减少了调用行为的类及执行行为的类之间的耦合度。

(III)命令模式允许客户端运行过程中动态地调用创建新命令对象创建新行为,并将新行为指定给发起者。

(IV)命令模式可以实现应用程序的命令链(宏命令)、恢复、重做和日志特征。

(4)命令对象是具体命令类的实例,它具有一些内置的行为。对调用这些行为的类来说,执行这些行为的类以及类中实现这些行为的方法都被隐藏起来了。这些信息都封装在命令对象中。

(5)命令共享是命令模式的重要特征,它使扩展程序的整个过程易于管理。

(6)命令模式的另一个优点是利用它能够简单地实现恢复、重做、排队和日志功能。

(7)命令模式可以很好地进行封装和信息隐藏。从本质上讲,命令模式将行为内置在命令对象中。通过调用命令对象中的execute()方法执行命令。执行命令时委派的是什么类,实现行为时使用的是哪个方法对于客户端来说都是透明的。者实际上降低了任务发起者代码和任务实现者代码之间的耦合度。

(8)降低耦合度之后,命令对象变得非常简捷。单个的命令对象可以由多个命令发起者共享。

(9)命令对象另一个非常有用的特征是,可以在运行时动态地将命令对象赋值给任务发起者,这样可以根据应用程序状态的变化得到不同的执行效果。这在设计根据环境不断变化的应用程序时非常有用。

(10)可以使用命令模式实现在大多数应用程序中都会使用到的功能,如宏命令、恢复、重做和日志功能。

27.观察者模式

(1)观察者模式最关键的一点就是将信息发送给已预订信息的实例。

(2)观察者模式最主要的特征是将状态的变化情况统一收集起来后发布给所有的预订者。这种一对多的关系可以创建低耦合度的类,而且还能保持类之间数据一致性。用这种方式将信息发送给不同的类不仅可以提高效率,而且还易于扩展。

(3)观察者模式的主要特征:

(I)在松耦合但相互关联和交互的对象中保持数据的一致性。

(II)数据接收者(观察者)可以预定数据,也可以取消预定。

(III)唯一的数据源(主体)发送状态变化的信息。

(IV)可以由多个观察者预定信息。

(4)观察者模式两个主要的对象就是主体和观察者。主体向观察者通知各种状态的变化情况。观察者模式主要通过对象的组合而不是继承来实现代码的重用。主体将操作委派给观察者。

(5)观察者模式中有两个主要的元素:主体和观察者。

主体接口中包含将状态变化通知给观察者的方法、预定方法和取消预定方法。能接收预定对象表示可以将新对象加入到接收数据对象里列表中。主体中的方法都要委派给观察者。观察者中只需要一个更新状态的方法。具体的主体类利用观察者中的更新方法实现接口中的通知方法。另外,具体的主体类中还有有关状态变化的set方法和get方法。具体的观察者必须实现更新方法。

(6)观察者模式的主要目的是发布信息,通过预定方法、取消预定方法、主体类中的通知方法及观察者中的更新方法实现。让这些方法协调工作的关键是保存预定观察者的数组和一个用于广播当前状态的发布信息和方法。

(7)观察者模式中,发送给预定观察者的数据是一致的,但并不对数据的格式做任何要求,观察者可以接收到数据后按不同的要求设置数据的格式。观察者模式只保证所有预定的观察者收到的数据是一致的。

(8)观察者模式可以通过唯一的主体类处理快速变化的数据,而且还能在很短的时间内将数据发送给不同的预订者。

(9)采用观察者模式可以将快速变化的数据发送到一个中心对象,然后再从中心对象发送给预定者。还能够动态地取消预定。

(10)观察者模式体现了编写程序时采用接口而不采用具体的实现的原则。

28.模板方法模式

(1)本质上,模板方法是一个算法,它由一系列为实现某些目标的操作组成。

(2)通常,模板方法设计模式是以定义算法的主类为中心的灵活算法组合。

(3)模板方法设计模式的特征:

(I)类与类之间的行为分布使用继承。

(II)在通用算法里允许子类提供操作的具体内容

(III)使用反向控制结构,即父类调用子类的操作

(IV)规定算法里的步骤并锁定操作顺序

(V)可以留有“钩子”操作,以便在特定节点进行扩充。

(4)通过允许子类在算法中的不同部分填充一些操作,模板方法设计模式兼有继承的优点和组合的灵活性。

(5)反向控制结构有时被称作“好莱坞原则”。父类通过模板调用子类的操作。子类仅仅给出算法中操作的具体内容,而算法则由父类控制。

(6)模板方法使用最终属性锁定自身。通过向函数添加最终属性,函数则不能被覆盖。只需要锁定模板方法,不用锁定抽象函数(操作)。因此,子类可以根据需要覆盖这些操作,然而,子类不能改变这些操作的次序。

(7)最后添加钩子操作。一个钩子就是一个在模板方法设计上下文环境中能够被覆盖的方法。钩子也可以被看做一个允许钩子子类添加算法的后门。

(8)使用模板方法的窍门是知道如何区分可被覆盖的抽象函数、不能被覆盖的且整个算法都要用到的具体函数和可被随意覆盖的钩子操作。

(9)模板方法设计模式反应这些:模板方法本身在父类,父类调用子类。更具体地说,模板方法能调用:

(I)具体操作

(II)定义模板方法的主类中的具体操作

(III)原始操作

(IV)工厂方法

(V)钩子

然而,这些底层对象不能调用父类。

(10)控制子类扩充是模板方法的用途之一。

(11)模板方法设计模式展示了如何在子类中分配行为。它将大量的具体工作留给子类,但是,它同时控制着模板方法的算法顺序。模板方法设计模式是控制依赖性和使用反转结构的良好例证。

(12)正因为如此,在控制力和灵活性被同时需要,而且又要最大程度降低依赖性的情况下,模板方法是一个很好的解决方案。

29.钩子

(1)钩子操作就是被放置在模板方法中,允许在主算法里对它进行扩充的操作。

(2)钩子函数和抽象函数的差别在于前者可以被覆盖,而后者必须覆盖。

(3)抽象函数和钩子函数都可以没有任何内容。然后,二者的创建不同,通过添加内容,钩子函数提供了一个创建默认状态的方法。

(4)当子类只调整算法中的部分具体内容时,钩子是有用的。

(5)一个钩子是一个具体方法,但它仍可以像任何抽象方法一样被覆盖;因此,它可以在具体类中被重写。

30.状态模式

(1)用来创建一个状态机器的设计模式

(2)状态设计模式主要关注应用程序中的不同状态,状态间的转换和状态的不同行为。

(3)接口程序包含这些转换,每个状态转换用一个方法实现。每个方法依据使用它的不同上下文环境实现其功能。

(4)状态设计模式的特征

(I)状态作为对象的部分存在于对象之中。

(II)当状态变化时,对象会在某些方面变化。表面上看,对象可能改变了类,但实际上,它们改变了类里的行为。每个状态的行为取决于对象中其他状态的当前状态。

(5)状态机器是在运用状态设计模式设计的应用程序中使用的状态的通用模型。

(6)状态设计模式是基于状态和转换的。这是我们使用状态图的一个原因,状态图有助于阐明和简化基于多种状态和状态间转换的架构设计。状态设计中的转换可以由状态本身控制,也可以由上下文环境类控制。同样,因为状态设计为每一个状态(行为环境)创建了一个类,与在策略设计模式里相比,在状态设计模式里我们倾向生成更多的类。状态类决定使用哪种行为,而策略设计封装了一系列算法,允许它们独立于在结构里使用它们的客户进行变化。

(7)使用状态设计模式,单个状态的所有的行为(方法)都被放置在一个对象(具体状态)里,应用程序(状态机器)的所有的转换行为都被放置在一个接口里。每个状态对象已适合自己的方式实现这些接口。因此,在同一个状态中不需要建立条件语句来区分不同的情况。

(8)状态设计模式关注对象所做的事情,而不关注对象的特征。

31.策略模式

(1)胜于提供一个目标应用程序设计模式,策略模式往往用来阐明如何正确地实施OOP。

(2)策略设计模式是一个委托的完美实例。

(3)策略设计模式的最大优势是它的适应能力。策略设计模式是一个松散组合,具有很好的可更改性和适应性。而且,它是一个使用大小算法的良好工具。

(4)所有策略都封装了一个算法,每个算法作为对另一个类的委托。因此,策略模式使用了好的OOP的四个基本原则:继承性、多态性、抽象性、封装性。

(5)状态设计模式封装状态和状态上下文环境,策略模式封装算法。

32.模型-视图-控制器(MVC)模式

(1)MVC模式通常用来为软件应用程序创建接口,它由三个元素组成

(I)模型:包含应用程序数据和逻辑来管理应用程序的状态。

(II)视图:在屏幕上呈现用户接口和应用程序状态。

(III)控制器:处理用户输入来改变应用程序状态。

(2)MVC模式每个元素的职责

(I)模型:模型负责管理应用程序的状态。模型里的应用程序逻辑执行两项重要任务:响应对应用程序状态信息的请求和依据请求采取行动改变状态。

(II)视图:视图是应用程序的外观。用户通过视图与应用程序交互。一个应用程序可以包含多个输入或输出视图。视图不一定必须可视。

(III)控制器:虽然控制器这个术语的意思是一个控制应用程序的接口,但是,在一个MVC模型里,控制器不包含任何用户接口元素。提供输入的用户接口元素属于视图组件。控制器决定视图如何响应用户输入。

(3)MVC元素间的通信

(I)MVC模式的每个元素都以非常明确的方式彼此通信。通信对通常由一个与应用程序交互的用户触发的一系列事件时必要的。系列事件描述如下:

(i)用户与一个用户界面元素进行交互(比如在一个视图里单击一个按钮)

(ii)视图发送单击事件给控制器,控制器决定如何处理

(iii)控制器基于自己如何处理按钮单击来改变模型。

(iv)模型通知视图模型状态现在已经发生变化。

(v)视图从模型读取状态信息并更新它自身。

(4)模型改变并不是总由用户交互启动。模型可以基于某些事件更新自身。

(5)MVC的另一个特征是每个模型可以拥有多个与它关联的视图。

(6)可以把模型、视图和控制器看作三个独立的类。

(I)模型:需要拥有对视图的引用

(II)视图:需要对模型和控制器的引用

(III)控制器:需要对模型的引用

(7)使用MVC的主要优势是松耦合,它允许在三个元素间实现。

(8)视图只是模型状态的外部表现,它们将用户界面事件委托给一个控制器。因此,控制器本质上是一个算法,它处理用户在一个特定视图里的输入。这个委托封装了特定用户界面元素,依据修改模型进行动作的实现。可以很容易地为同一个视图替换不同的控制器开获得不同的行为。这是一个实施策略模式的完美环境。

(9)MVC模式的主要特征

(I)MVC模式的主要用途是在创建带有用户接口的应用程序时提供灵活性。MVC模式分离模型、视图和控制器元素,采用观察者、策略和组合模式来分离它们。

(i)MVC由模式、视图和控制器三个元素组成,它们分担一个带有图形用户界面的应用程序职责。

(ii)模型和视图之间的关系与观察者模式里的一个具体目标和一个具体观察者之间的关系相同。

(iii)视图和控制器之间的关系与策略模式里的一个上下文环境和一个具体策略之间的关系相同。

(iv)可以像模型注册多个视图

(v)使用组合模式可以嵌套视图来创建复杂的用户接口,以流水线的方式完成更新过程。

(10)MVC模式里的关键OPP概念是松耦合。松耦合减少了MVC模式里分离的元素间的相关性。

(11)MVC模式里所有的元素都是松耦合,允许在不改变现有元素的情况下添加或换出任何组件。此外,使用组合模式实现嵌套视图允许在不用修改单个视图的情况下,从客户端重新配置屏幕布局和视图更新过程。

(12)MVC可以集成观察者模式、策略模式和组合模式来管理它的元素和元素间的相关性。

分类:

技术点:

相关文章:

  • 2021-05-26
  • 2021-06-23
  • 2021-08-21
  • 2022-12-23
  • 2021-10-09
  • 2021-07-03
  • 2021-08-20
  • 2021-07-18
猜你喜欢
  • 2021-06-19
  • 2022-12-23
  • 2021-08-10
  • 2021-07-06
  • 2022-12-23
  • 2021-10-11
  • 2022-01-22
相关资源
相似解决方案