当前位置: 首页 > news >正文

合成

1:概述
     合成模式有时又叫做部分-整体模式(Part-Whole)。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。
2:类图
r_Pic59.gif

抽象构件(Component)角色:这是一个抽象角色,它给参与组合的对象规定一个接口。这个角色给出共有接口及其默认行为。
树叶构件(Leaf)角色:代表参加组合的树叶对象。一个树叶对象没有下级子对象。
树枝构件(Composite)角色:代表参加组合的有子对象的对象,并给出树枝构件对象的行为。
3:代码

ExpandedBlockStart.gif ContractedBlock.gif      /**/ /// <summary>
InBlock.gif    
/// 抽象构件(Component)角色
ExpandedBlockEnd.gif    
/// </summary>

None.gif      public   interface  IUserBase
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
InBlock.gif        
void AddChild(IUserBase userBase);
InBlock.gif        
void SetPower(string power);
ExpandedBlockEnd.gif    }

None.gif
ExpandedBlockStart.gifContractedBlock.gif    
/**/ /// <summary>
InBlock.gif    
/// 树叶构件(Leaf)角色
ExpandedBlockEnd.gif    
/// </summary>

None.gif      public   class  User:IUserBase
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
InBlock.gif        
private string powerList = string.Empty;
InBlock.gif
InBlock.gif        
public void AddChild(IUserBase userBase)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
public void SetPower(string power)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            powerList 
= power;
ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif    }

None.gif
ExpandedBlockStart.gifContractedBlock.gif    
/**/ /// <summary>
InBlock.gif    
/// 树枝构件(Composite)角色
ExpandedBlockEnd.gif    
/// </summary>

None.gif      public   class  Group : IUserBase
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
InBlock.gif        
private ArrayList userlist = new ArrayList();
InBlock.gif
InBlock.gif        
public void AddChild(IUserBase userBase)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            userlist.Add(userBase);
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
public void SetPower(string power)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
foreach (IUserBase userbase in userlist)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                userbase.SetPower(power);
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif    }

None.gif
// 调用
None.gif
            Bll.Composite.Group group1  =   new  Bll.Composite.Group();
None.gif            Bll.Composite.Group group2 
=   new  Bll.Composite.Group();
None.gif
None.gif            Bll.Composite.User user1 
=   new  Bll.Composite.User();
None.gif            Bll.Composite.User user2 
=   new  Bll.Composite.User();
None.gif            Bll.Composite.User user3 
=   new  Bll.Composite.User();
None.gif
None.gif            group1.AddChild(user1);
None.gif            group1.AddChild(user2);
None.gif
None.gif            group2.AddChild(user1);
None.gif            group2.AddChild(group1);
None.gif
None.gif            
// 设置组权限,则设置了组内的用户权限
None.gif
            group1.SetPower( " 权限列表A " );
None.gif            group2.SetPower(
" 权限列表B " );
None.gif
None.gif            user3.SetPower(
" 权限列表B " );

相关文章:

  • 写出稳定的Modbus代码之点滴经验
  • TMainMenu 类[四] - 所有可选的快捷键列表
  • 圆方树
  • JS简单表单验证
  • 创建并运行HelloWorld Java项目和类
  • Lp空间
  • 【转】简单的计算机英语列表
  • (4)logging(日志模块)
  • 自己动手实现java数据结构(二) 链表
  • Encoding Convert
  • 10月18日 JS begant
  • 我判断求职者的思路和方法——从“经验歧视”谈起
  • 2018-2019-1 20189206 《Linux内核原理与分析》第八周作业
  • 《十面埋伏OL》今日15时开启压力测试
  • sqlserver varchar和Nvarchar区别
  • SegmentFault for Android 3.0 发布
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【技术性】Search知识
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Android框架之Volley
  • Apache Pulsar 2.1 重磅发布
  • CentOS从零开始部署Nodejs项目
  • express如何解决request entity too large问题
  • Git同步原始仓库到Fork仓库中
  • JavaScript实现分页效果
  • Java比较器对数组,集合排序
  • Laravel 中的一个后期静态绑定
  • MySQL-事务管理(基础)
  • OSS Web直传 (文件图片)
  • php中curl和soap方式请求服务超时问题
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 对超线程几个不同角度的解释
  • 缓存与缓冲
  • 京东美团研发面经
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 如何实现 font-size 的响应式
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 推荐一个React的管理后台框架
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​ubuntu下安装kvm虚拟机
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (力扣)1314.矩阵区域和
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)甲方乙方——赵民谈找工作
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost