角色模式

Copyright © TeleManagement Forum 2013. All Rights Reserved.

This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published, and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this section are included on all such copies and derivative works. However, this document itself may not be modified in any way, including by removing the copyright notice or references to TM FORUM, except as needed for the purpose of developing any document or deliverable produced by a TM FORUM Collaboration Project Team (in which case the rules applicable to copyrights, as set forth in the TM FORUM IPR Policy, must be followed) or as required to translate it into languages other than English.

上图定义了一个交换机(Switch)和一个路由器(Router),二者作为物理设备(PhysicalDevice)的子类(继承方式)。交换机和路由器的基本区别是前者转发流量,后者路由并转发流量。但是对于一台具有路由功能的三层交换机如何处理呢?一种可能的方式是在上图中为交换机(Switch)创建一个子类Layer3Switch。但这是一个不好的方案,因为每当路由技术更新换代时,这个模型中的路由器(Router)和三层交换机(Layer3Switch)都随之需要更新;另外这种方案中的三层交换机与路由器并没有多大区别。如果出现了四层交换机(Layer4Switch),那么又如何为之建模呢?路由器、Layer3Switch和Layer4Switch的路由类型又如何区分呢?如何处理带有防火墙功能的路由器呢?类似的问题是很多的。可见,多重继承的方式并不能解决这类问题。

对于以上问题,我们可以采用一种更加优雅的方式解决——角色模式。

角色模式是增强模型可扩展性的基本方式。角色模式将一个实体的各种功能抽象为不同的对象,而不是将其功能嵌在实体本身中,例如角色模式可以将一个设备的不同功能抽象为不同的对象。

一个角色刻画了一个对象所能提供的功能。从SID的业务视图角度看,这种刻画指的是属性和关系;从SID系统视图看,这种刻画扩展为方法、约束和行为。

角色模式的好处是:

1、易于分别定义实体本身的行为与实体的功能而互不影响;

2、实体角色的改变不需要改变实体本身。

回到一开始讲到的例子,如果采用角色模式,我们不需要定义不不同的子类,而是为设备的不同功能创建不同的角色,这样就解决了同样的功能重复出现在不同设备上的混乱情况,例如可以将路由功能与路由器、三层交换机进行关联。如下图所示:

由于通信网技术的不断发展,继承方式不能很好地驾驭这些变化。如果将关键功能抽象为角色,则可以为现在和将来出现的设备统一建模,因此将设备角色(DeviceRole)定义为不同于设备(Device)的实体是一种可扩展的方式。这样只需要为设备角色(DeviceRole)创建不同的子类以表示不同的功能,通过组合相关的设备角色形成某个设备的功能,从而避免为设备(Device)创建子类。

角色模式的应用:资源配置

举一个MPLS VPN的例子,不管VPN的拓扑有多复杂,其设备基本上由3种角色的路由器构成:

1、    CE

2、    PE

3、    P

一个基本的VPN拓扑如下图所示:

上图显示了2条VPN,红色VPN通过骨干网连接了站点1和站点3,绿色VPN通过骨干网连接了站点2和站点4。这2条VPN共享了相同的网络。角色的概念可以用来标准化CE与PE的连接和转发配置。例如,为CE路由器定义一组策略,用于控制其如何连接不同类型的PE路由器。这些策略可以抽象为不同的角色,独立于任何特定的设备,从而能够减少冗余并实现重用。另外,运营商骨干网的核心由扮演P角色的路由器构成,由于这4个P路由器功能相同,其中1个路由器的配置模板可以用来配置其它3个P路由器。PE和CE的配置可以采用相同的方式。

TMF SID中的角色模式的更多相关文章

  1. 基于TMF SID的高可扩展性数据模型

    基于TMF SID的高可扩展性数据模型 前言 此文根据TMF SID规范撰写,欢迎大家提出建议和意见. TMF文档版权信息 Copyright © TeleManagement Forum 2013. ...

  2. TMF SID性能相关实体介绍

    TMF SID性能相关实体介绍 Copyright © TeleManagement Forum 2013. All Rights Reserved. This document and transl ...

  3. 设计模式(一):“穿越火线”中的“策略模式”(Strategy Pattern)

    在前段时间呢陆陆续续的更新了一系列关于重构的文章.在重构我们既有的代码时,往往会用到设计模式.在之前重构系列的博客中,我们在重构时用到了“工厂模式”.“策略模式”.“状态模式”等.当然在重构时,有的地 ...

  4. angular中的MVVM模式

    在开始介绍angular原理之前,我们有必要先了解下mvvm模式在angular中运用.虽然在angular社区一直将angular统称为前端MVC框架,同时angular团队也称它为MVW(What ...

  5. JSP中使用的模式——JSP+Servlet+JavaBean

    上一篇博文写到模式一:JSP+JavaBean 链接地址:http://wxmimperio.coding.io/?p=155 JSP中两种模式的总结 链接地址:http://wxmimperio.c ...

  6. Web前端开发中的MCRV模式(转)

    作者: izujian  来源: baiduux 摘要:针对前端开发中基于ajax的复杂页面开发所面临的代码规模大,难以组织和维护,代码复用性.扩展性和适应性差等问题,本文尝试以MVC思想为 基础,结 ...

  7. 002-创建型-04-建造者模式(Builder)、JDK1.7源码中的建造者模式、Spring中的建造者模式

    一.概述 建造者模式的定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象 ...

  8. 「补课」进行时:设计模式(5)——从 LOL 中学习代理模式

    1. 前文汇总 「补课」进行时:设计模式系列 2. 从 LOL 中学习代理模式 我是一个很喜欢玩游戏的人,虽然平时玩游戏的时间并不多,但我也是一个忠实的 LOL 的爱好者,就是段位有点惨不忍睹,常年倔 ...

  9. 制作类似ThinkPHP框架中的PATHINFO模式功能

    一.PATHINFO功能简述 搞PHP的都知道ThinkPHP是一个免费开源的轻量级PHP框架,虽说轻量但它的功能却很强大.这也是我接触学习的第一个框架.TP框架中的URL默认模式即是PathInfo ...

随机推荐

  1. Docker-为镜像添加SSH服务

    进入容器的办法有很多,包括exec.attach等命令,但是这些命令都无法解决远程管理容器的问题,因此,需要SSH的支持 基于commit命令创建 docker提供了docker commit命令,支 ...

  2. IDEA 安装完码云插件,运行报“Cannot run program "xxx":CreateProcess error=2,系统找不到指定的文件”

    错误:Cannot run program "E:\Program Files\Git\bin\git.exe":CreateProcess error=2,系统找不到指定的文件 ...

  3. C++quickSort

    void QuickSort1(int *s,int left,int right){ int i,j,t,pivot; if(left>right) return; if(left<ri ...

  4. [转]Eclipse快捷键_01_常用快捷键汇总

    (注:红色标出来的是经常使用到的快捷键,磨刀不误砍柴工啊...) 一.常用快捷键 Shift+Alt+L:  自动补全等号左边对象 .(用鼠标选中这一行,然后按组合键Shift+Alt+L,在弹出的对 ...

  5. django学习笔记(三)模型

    1.创建一个django app: python manage.py startapp books 2.validate 命令检查你的模型的语法和逻辑是否正确.一旦你觉得你的模型可能有问题,运行 py ...

  6. python中zip()函数基本用法

    zip()函数接受一系列可迭代对象作为参数,将不同对象中相对应的元素打包成一个元组(tuple),返回由这些元组组成的list列表,如果传入的参数的长度不等,则返回的list列表的长度和传入参数中 ...

  7. ffmpeg 翻译文档

    ffmpeg 翻译文档 (参考源文件ffmpeg-all 包含重要组件) 目录: 1 命令语法 2 描概览 3 详细说明 4 流的选择(指定) 5 选项 技提示(原版已废弃) 6 例子 7 语法 8 ...

  8. Cannot resolve class or package 'springframework' less... (Ctrl+F1) Inspection info:Spring XML mode

    其实这个问题是由于MySQL 这个jar 包依赖类型默认是runtime ,也就是说只有运行时生效,所以虽然这里报错,但是不影响你代码运行. 解决方案: 将runtime 修改为Compile 即可 ...

  9. Unity中的ShaderToys——将大神们写的shader搬到unity中来吧

    http://lib.csdn.net/article/unity3d/38699 这篇文章翻译自国外的一篇文章(这里是原文链接),正在使用unity的你是否在shader toy上发现很多牛逼哄哄的 ...

  10. BZOJ4009:[HNOI2015]接水果

    浅谈树状数组与线段树:https://www.cnblogs.com/AKMer/p/9946944.html 题目传送门:https://www.lydsy.com/JudgeOnline/prob ...