UML第二部分和创建型模式

 

一、UML第二部分

  1. 状态机视图

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

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

状态机不但可以描述类的行为,而且可以描述用例,协作和方法的动态行为。

状态机是由状态和迁移组成的图。

状态机对理解控制机制较实用,如用户界面和设备控制器。

 

  1. 活动视图

活动视图是状态机的一种对计算和工作流建模的特殊形式,活动图的状态代表了运算执行的状态,而非一般对象的状态。

活动图包含活动状态。

活动图可能包含动作状态,动作状态与活动状态很相似,但动作状态是原子的且当它活动时不允许迁移。

活动图可能包含分支,以及并发线索中控制的分叉

活动图是活动视图的标记形式

 

  1. 交互视图

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

协作是对上下文中交互实现某种行为对象群体的描述。协作包括了由对象和连接多填充的空槽。

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

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

二、创建型模式

  1. Singleton 单件(创建型模式)

单线程Singleton模式的几个要点

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

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

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

• Singletom模式只考虑到了对象创建的管理,没有考虑对 象销毁的管理。就支持垃圾回收的平台和对象的开销来

讲,我们一般没有必要对其销毁进行特殊的管理。

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

  1. Abstract Factory 抽象工厂模式(创建型模式)

Abstract Factory模式的几个要点

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

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

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

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

  1. Builder 生成器模式(创建型模式)

Builder 模式的几个要点

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

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

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

  1. Factory Method 工厂方法模式(创建型模式)

Factory Method模式的几个要点

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

• Factory Method模式通过面向对象的手法,将所要创建的具体对象工作延迟到子类,从而实现一种扩展(而非更改)的策略,较好地解决了这种紧耦合关系。 • Factory Method模式解决“单个对象”的需求变化,Abstract Factory 模式解决“系列对象”的需求变化,Builder模式解决“对象部分”的需求变化。

  1. Prototype 原型模式(创建型模式)

Prototype模式的几个要点

• Prototype模式同样用于隔离类对象的使用者和具 体类型(易变类)之间的耦合关系,它同样要求 这些“易变类”拥有“稳定的接口”。

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

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

posted @ 2021-02-05 12:08  计应192西七组  阅读(67)  评论(0编辑  收藏  举报