第三周作业

UML_Concept:

状态视图

状态视图:状态视图通过对每个对象的生命周期进行建模,描述了对象时间上的状态行为

状态:指就某个特定的类而言,对于发生的事件具有相同性质响应的一系列对象值。

状态机

状态机是由状态和迁移组成的图。通常状态机附属于类,描述了类实列对接受事件的响应。

状态机是某个类的对象所有可能生命历史的模型。

事件

事件是具有时间和空间位置的显著发生的某事件。

事件可以划分为各种显式和隐式的种类:信号事件,调用事件,变更事件和时间事件。下面是事件类型和它们的描述。

状态

状态描述了对象生命期中的一段时间。它可以通过三个互补的方面来指定:某些性质上具有相似性的一系列对象值;对象等待某个或某些事件发生的一段时间;对象执行某些正在进行活动的一段时间。状态可以具有名称,尽管它常常是匿名的及用它的动作来描述。

状态由带圆角的长方形来表示

迁移

迁移定义了该状态对象对某事件发生的响应。通常,迁移具有事件触发,迁移条件,动作和目标状态。下图显示了迁移的种类和迁移调用的隐式动作。

复合状态

简单状态无子结构,只有若干迁移和可能的进入和退出动作。复合状态可以分解为连续的或并发的子状态.

下图列举了各种状态的类型。

活动视图

活动视图( activity graph)的是状态机的一种对计算和工作流建模的特殊形式。

活动图

活动图是活动视图的标记形式。它包含了一些方便使用的速记符号。

泳道

根据责任来在模型中组织活动常常是非常有用的一一例如:将由某个商业组织控制.的活动划分在一起。这类划分可以通过图中分隔的区域来表达。由于它们的外观,每个区域被称为泳道。图7-2显示了泳道。

对象流

活动图不但可以显示控制流,还可以显示对象取值的流。对象流的状态表达了对象是活动的输入还是输出。于输入值,由对象流状态至活动的虚线来表示。如果活动具.有一个以上的输出值或后续的控制流,则箭头从分(fork) 的符号出发。类似的,多个输入值则汇集至连接(join) 符号。

交互视图

交互视图提供了描述一系列对象行为更为全局的视图。该视图用协作来建模。

协作

协作是对上下文中交互实现某种行为对象群体的描述。

协作包括了由对象和连接多填充的空槽。

协作槽被称为角色,因为它描述了协作中对象和链的用途。

分类角色代表了对参与协作执行的对象的描述;

关联角色代表了对参与协作执行的链的描述。

分类角色是受到协作中它所充当角色约束的分类;

关联角色是受到协作中它所充当角色约束的关联。

交互

交互是在协作中由分类角色通过关联角色进行交换的一系列消息。

消息是对象间的单向通信,从发送者到接受者的携带信息的控制流。

消息序列可以用两种图来表达

1,顺序图(重点在消息的时间顺序)

2,协作图(重点在交换消息的对象间的关系上)

顺序图

顺序图以二维表来显示交互。纵向是时间轴;时间自伤而下。横向显示代表协作中单个对象的分类角色。

激活

激活是过程的执行,包括她等待内嵌过程执行的时间。

协作图

协作图是包含分类角色和关联角色,而非仅包含分类和关联的类图

模式

模式是连同何时使用指南的参数化协作。

C#面向对象设计模式纵横谈

Singleton单件(创建模式):

模式分类:

从目的来看

创建型(Creational):负责对象创建。

结构型(Structural):处理类与对象的组合。

行为型(Behavioral):类与对象交互中的职责分配。

从范围来看

类模式处理类与子类的静态关系。

对象模式处理对象间的动态关系。

动机(Motivation):

在软件系统中,经常一这样一些特殊的类,必须保证他在系统中只存在一个实例,才能确保他妈的逻辑正确性,以及良好的效率。

意图(Intent):

保证一个类仅有一个实例,并提供一个该实例的全局访问点。

单线程Singleton模式的几个要点:

1,Singleton模式中的实例构造器可以设置为protected以允许子类派生。

2,Sinaleton模式一般不要支持lCloneable接口,因为这可能会导致多个对象实例,与Singleton模式的初衷违背。

3,Singleton模式一般不要支持序列化,因为这也有可能导致多个对象实例,同样与Singleton模式的初衷违背。

4,Sinaletom模式只考虑到了对象创建的管理,没有考虑对象销毁的管理。就支持垃圾回收的平台和对象的开销来讲,我们子般没有必要对其销毁进行特殊的管理。

5,不能应对多线程环境:在多线程环境下,使用Singleton模式仍然有可能得到Singleton类的多个实例对象。

Singleton模式扩展:

1,将一个实例扩展到n个实例,例如对象池的实现。

2,将new构造器的调用转移到其他类中,例如多个类协同工作环境中,某个局部环境只需要拥有某个类的一个实例。

3,理解和扩展Singleton模式的核心是“如何控制用户使用new对一个类的实例构造器的任意调用”。

Abstarct Factory抽象工厂

new的问题

实现依赖,不能应对“具体实例化类型"的变化.

解决思路:

封装变化点----哪里变化,封装哪里

潜台词:如果没有变化,当然不需要额外的封装

工厂模式的缘起

变化点在“对象创建”,因此就封装“对象创建”面向接口编程——依赖接口,而非依赖实现

简单工厂的问题:

不能应对“不同系列对象”的变化。

如何解决:

使用面向对象的技术来“封装”变化点

动机(Motivation)

在软件系统中,经常面临着“系列相互依赖的对象的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。

意图(Intent)

提供一个接口,让该接口负责创建一系列“相关或者

相互依赖的对象”,无需指定它们具体的类。

Abstract Factory模式的几个要点:

1,如果没有应对“多系列对象构建”的需求变化,则没有必要使用Abstract Factory模式,这时候使用单的静态工厂完全可以。

2,“系列对象”指的是这些对象之间有相互依赖、或作用的关系,例如游戏开发场景中的“道路”与“房屋”的依赖,“道路”写“地道”的依赖。

3,Abstract Factory模式主要在于应对“新系列”的需求变动。其缺点在于难以应对“新对象”的需求变动。

4,Abstract Factory模式经常和Factory Method模式共同组合来应对“对象创建”的需求变化。

Bulider生成器

动机(Motivation)

在软件系签中.有时候面临着“一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。

意图(Intent)

将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

Builder模式的几个要点

1,Builder模式主要用于“分步骤构建一个复杂的对象”。在这其中“分步骤”是一个稳定的算法,而复杂对象的各个部分则经常变化。

2,变化点在哪里,封装哪里—Builder模式主要在宇应对“复杂对象各个部分”的频繁需求变动。其缺点在手难以应对“分步骤构建算法"的需求变动。

3,Abstract Factory模式解决“系列对象”的需求变化,Builder模式解决“对象部分”的需求变化。Builder模式通常和Composite模式组合使用。

Factory Method工厂方法

耦合关系直接决定着软件面对变化时的行为。

1,模块与模块之间的'紧耦合使得软件面对变化时,相关的模块都要随之更改

2,模块与模块之间的松耦合使得软件面对变化时,一些块更容易被替换或者更改,但其他模块保持不变

动机(Motivation)

在软件系统中,经常面临着“某个对象"的创建工作;由于需求的变化,这个对象经常面临着剧烈的变化,但是它却拥有比较稳定的接口。

意图(Intent)

定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类。

Factory Method模式的几个要点

1,Factory Method模式主要用于隔离类对象的使用者和具体类型之间的耦合关系。面对一个经常变化的具体奚型,紧耦合吴系会导致软件的脆弱。

2,Factory Method模式通过面向对象的手法,将所要创建的具体对象工作延迟到子类,从而实现一种扩展(而非更改)的策略,较好地解决了这种紧耦合关系。

3,Factory Method模式解决“单个对象”的需求变化,Abstract Factory模式解决“系列对象”的需求变化,Builder模式解决“对象部分”的需求变化。

Prototype原型

动机(Motivation)

在软件系统中,经常面临着“某些结构复杂的对象”的创建工作:由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定-致的接口。

意图(Intent)

使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。

Prototype模式的几个要点

1.Prototype模式同样用于隔离类对象的使用者和具体类型(易变类)之间的耦合关系,它同样要求

这些“易变类”拥有“稳定的接口”。

2.Prototype模式对于“如何创建易变类的实体对象”采用“原型克隆"的方法来做,它便得我们可以非常灵活地动态创建“拥有某些稳定接口”的新对象——所需工作仅仅是注册一个新类的对象(即原型),然后在任何需要的地方不断地Clone。

3.Prototype模式中的Clone方法可以利用.NET中的Object类的MemberwiseClone()方法或者序列化来实现深拷贝。

有关创建型模式的讨论

1.Singleton模式解决的是实体对象个数的问题。除了Singleton之外,其他创建型模式解决的都是new所带来的耦合关系。

2.Factory Method, Abstract Factory, Builder都需要一个额外的工广类来负责实例化“易变对象”,而Prototype则是通过原型个特殊的工广类)来克隆“易变对象”。

3.如果遇到“易变类”,起初的设计通常从FactoryMethod并始,当遇到更多的复杂变化时,再考虑重构为其他兰种工广模式(Abstract Factory,Builder ,Prototype) 。

posted @ 2021-02-04 12:07  19A1  阅读(110)  评论(0)    收藏  举报