第三周作业
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) 。
浙公网安备 33010602011771号