C#面向对象设计模式第九讲:Composite 组合模式(结构型模式)

(根据MSDN Webcast相关课程整理)

由俄罗斯套娃讲起。娃娃里又包含另一个娃娃,最后那个不包含任何娃娃。

组合模式,采用树型结构来实现普遍存在的对象容器,将本原一对多的复杂的关系,转换成一对一的简单关系,从而可以一致的处理一批对象,使得客户程序不需要关心对象内容的具体实现。

将客户程序与对象内部实现解耦,是组合模式的核心思想。解耦后,客户程序只能对象上层的接口发生关系。

clip_image002

一种不好的设计方案:

clip_image004

把一对多的关系暴露给外界,客户程序即要处理一对一的关系,又要处理一对多的关系。

clip_image006

改进之后的方案,采用Composite设计模式:

clip_image008

提升容器对象特有的方法到父类中,从面确保客户程序可以采用一致的方案来处理对象。另外,在Process方法中完成两件事:

1, 完成自身的处理事务;

2, 循环处理所包含的子对象中的事件。

这就将原来在客户程序中递归调用的任务转移到了对象内部的循环调用。大大减少的耦合关系和代码的复杂度。

注:示例代码中使用了Add与Remove方面来完成对包含成员的操作,推荐使用UML图中的方法:使用IList来管理对象,从而自动实现Add与Remove等操作方法。

clip_image010

常见的类似结构的菜单,窗口,以及ASP.Net中的控件结构等。

转载于:https://www.cnblogs.com/luckeryin/archive/2011/12/26/2302188.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262960.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker for Windows

安装条件:必须是 Win10 Pro 或者 Enterprise version. 转载于:https://www.cnblogs.com/qijiage/p/9261258.html

《火影忍者:究级风暴》渲染技术究极解析!

http://www.opengpu.org/forum.php?modviewthread&tid6609 与Takara Tomy公司的《火影忍者》系列游戏不同,初次登陆PS3平台的本作是由日本CyberConnect2制作的对战格斗游戏《火影忍者:终极英雄》系列的最新作。虽然游戏的开发商仍然是CyberConnect2…

工程中新增Properties

如一开始工程中是没有Properties文件夹的! 但工程目录文件夹下却有一个Properties: 现在要向这个Properties文件夹中添资源文件。操作步骤: [添加新项]->[资源文件] 再将Resource.resx文件拉到Properties DONE!!!

Django:序列化的几种方法

前言 关于序列化操作,就是将一个可迭代的数据结构,通过便利的方式进行我们所需要的操作。 今天历来归纳一下,Django中的几种不同得分方法,已经Django-restframework提供的方法 创建一个Django的项目 再新建一个app 创建一个模型&a…

c#通过app.manifest使程序 右键 以管理员身份运行

c#通过app.manifest使程序以管理员身份运行 时间:2013-06-27 22:47来源:网络收集本站整理 作者:jtydl 点击: 1175 次微软在Windows Vista开始引入了UAC(用户帐户控制)新技术(点击这儿了解什么是UAC)。当程序执行时需要权限的话&am…

25款操作系统全面接触 [2]

Sun Solaris Sun Microsystems公司早期的操作系统版本Sun OS是基于BSD的。在1993年,他们与AT&T合作,转向了UNIX System V,并发布了称作Solaris.System V release 4的系统,这是一个UNIX System V和BSD的整合体。Solaris系统主…

Nuget发布Dll

今天要开始写ViewModel了,写完之后系统里的ViewModel都汇总到我这里,然后由我负责ViewModel的发布跟维护,所以Nuget发布Dll就要熟练啦~ 一,安装工具 1,Nuget Package Manager 2,NuGet.exe 下载地址为:http:…

技巧/诀窍:在ASP.NET中重写URL(转)

技巧/诀窍:在ASP.NET中重写URL 【原文地址】Tip/Trick: Url Rewriting with ASP.NET 【原文发表日期】 Monday, February 26, 2007 9:27 PM 经常有人请我指导应该如何动态地“重写”URL,以在他们的ASP.NETweb应用中发布比较干净的URL端点。这个博客帖…

妙趣横生算法 3:寻找相同元素的指针

实例说明 在已知两个从小到大的有序的数表中寻找出现的相同元素在第一个数表中的指针。 运行结果 实例解析 设两个数表的首元素指针分别为pa和pb,两个数表分别有元素an和bn个。另外,引入两个指针变量ca和cb,分别指向两个数表的当前访问元素。由于两个数表从小到大有…

Nginx 笔记与总结(14)expires 缓存设置

设置缓存,可以提高网站性能。 当网站的部分内容,比如新闻站的图片,一旦发布就不太可能发生更改,此时需要用户在访问一次页面之后,把该页面的图片缓存在用户的浏览器端一段时间,就可以用到 nginx 的 expires…

WP7应用开发笔记(8) IP输入框控件

因为需要在手机上配置IP,我需要一个界面输入IP地址,虽然直接使用TextBox,但是这样不太友好,我希望能够有和Windows网络设置上一样的IP输入框。所以决定写一个自定义控件。 设计控件外观 4个TextBox和3个显示“.”的TextBlock就可以…

C#并发实战Parallel.ForEach使用

前言:最近给客户开发一个伙食费计算系统,大概需要计算2000个人的伙食。需求是按照员工的预定报餐计划对消费记录进行检查,如有未报餐有刷卡或者有报餐没刷卡的要进行一定的金额扣减等一系列规则。一开始我的想法比较简单,直接用一…

[MSDN]ASP.NET MVC2(5)MVCRoute和urls

说明:本内容来自微软的webcast,讲师为苏鹏。视频没有书方便(想看哪页就看哪页),所以抄录要点和老师语录。 内容介绍 - url和routes介绍 - routes匹配url的工作方式 - 使用routes Router对象mvc运转的核心。 预备知…

一个、说到所有的扩展指标

版权声明:本文博客原创文章,博客,未经同意,不得转载。

网络通信和网络编程

一、软件结构 C/S Client/Server B/S Browser/Server 二、网络通信协议 1、协议分类 UDP 应用: TCP/IP 三、网络编程三要素 1、协议(UDP、TCP/IP) 2、IP地址 3、端口号 转载于:https://www.cnblogs.com/wmqiang/p/11333351.html

[Android] 输入系统(二)

在上一篇文章的最后,我们发现InputDispatcher是调用了InputChannel->sendMessage把键值发送出去,那么相应的,也有接收键值的地方。接收函数是InputChannel->receiveMessage。 在InputConsumer::consume内找到了receiveMessage&#xff…

TCP协议和套接字

一、TCP通信概述,逻辑连接就是三次握手 二、客户端和服务端实现TCP协议通信基本步骤 1、客户端套接字对象 Socket 2、服务端套接字ServerSocket 客户端补充完整代码:除了创建各自的Socket对象有关代码,其他代码一样,就输出流的输出…

齐博V7仿爱丽图库模板(含齐博图库V1.0模板)

齐博模板图片模板 本齐博模板包含两个版本,分别适用于齐博V7整站的图片模型模板和齐博图库程序V1版。 1、图片独立频道页设置 整站后台添加独立频道页面名称:图片专题 网页头部模板:************************ 网页中间模板:******…

信息安全官谁:逼近的挑战,你准备好了吗?

作为一个首席信息安全官(CISO)并不easy,一方面要时刻面对董事会提出的难题。还有一方面在处理解决公司的安全威胁时,又不能超出预算范围。然而首席信息安全官的资源保持不变时,威胁环境本身却是千变万化、日新月异。因…

【hash】Seek the Name, Seek the Fame

【哈希和哈希表】Seek the Name, Seek the Fame 题目描述 The little cat is so famous, that many couples tramp over hill and dale to Byteland, and asked the little cat to give names to their newly-born babies. They seek the name, and at the same time seek the …