集合模式

       集合模式基于集合,用于在不改变现有结构的情况下,由访问单一对象升级为可访问一组对象,特别适用于代码重构过程中。它一般与观察者模式结合使用。主要应用于重构过程中将混乱的代码或者用别的不适用的模式写的代码升级为观察者模式之后,解决大量繁索的调用细节,将关联关系由一对一升级为一对多。对于类似事件处理的流程最为适用。

      考虑一个简单的日志处理系统。所有的业务逻辑类Logic都持有一个日志类Logger,Logger统一控制日志信息的去向,这样的系统已经非常灵活了,并且可以很容易地扩展Logger类来将日志存放到不同的介质中,甚至显示到不同的屏幕上。然而新的需求出现了,系统中产生的所有日志要同时出现在多个地方,比如在显示到屏幕的同时上传到网络上的其它设备中。

      解决方案之一创建一个同时将日志放到两个不同地方的Logger,然后将此类型的对象交给Logic。然而,每出现一种不同的需求,或者任意两个需要显示日志的需求全在一起,就要产生一个新的Logger子类。如果目前有N种处理日志的方式,隐含的要新创建的Logger子类就有N*N个! 显然这种设计不太实用。

      另一种方案是将Logic中所有写日志的地方都改成集合形式,这样灵活度和可扩展性都比较好。但面临的问题是要修改所有的Logic子类,并且还要在每一个地方处理诸如对象不为空等等的重复逻辑。工作量无疑非常大。

     集合模式正适合这种情况。它首先创建一个带有AddLogger、RemoveLogger集合接口的Logger子类LoggerCollection,并且持有一个数组(或者其它容量类的对象),每个元素都保存一个Logger,然后这样实现所有Logger接口的方法:对Logger的任何一个调用,都将其转换为对集合中每一个Logger对象的同样一个调用。在使用时他分为两步,第一是创建LoggerCollection类的对象,然后为每个需要处理日志的需求创建一个对应的Logger子类对象,并将所有这些Logger子类对象通过AddLogger方法添加到LoggerCollection对象中。第二就是用LoggerCollection对象代替原来的Logger子类对象,将它们交给所有的Logic。

    集合模式的优点是不改变现有的类,改动最小,但带来的灵活性却是最大的。很明显,以后可以很方便地将日志放到两个任意不同的地方,同时还不止两个,可以同时将日志放到任意N个不同的地方,而都无需任何修改,只需简单地创建每一个Logger,然后将它Add到LoggerCollection中。

转载于:https://www.cnblogs.com/huangpeng/archive/2011/06/28/2092591.html

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、 1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READmE.文件(md如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
Python中的多模式集合可以使用`set`数据类型来实现。`set`是一个无序且不重复的集合,可以用于存储多个元素。 要创建一个空的集合,可以使用空的花括号`{}`或者使用`set()`函数。例如: ```python my_set = {} print(type(my_set)) # 输出:<class 'dict'> my_set = set() print(type(my_set)) # 输出:<class 'set'> ``` 要在集合中添加元素,可以使用`add()`方法。例如: ```python my_set = set() my_set.add(1) my_set.add(2) my_set.add(3) print(my_set) # 输出:{1, 2, 3} ``` 如果要同时添加多个元素到集合中,可以使用`update()`方法。例如: ```python my_set = set() my_set.update([4, 5, 6]) my_set.update([7, 8, 9]) print(my_set) # 输出:{4, 5, 6, 7, 8, 9} ``` 集合中的元素是唯一的,重复的元素将被自动去重。例如: ```python my_set = {1, 2, 2, 3, 3, 3} print(my_set) # 输出:{1, 2, 3} ``` 可以使用`len()`函数获取集合中元素的个数。例如: ```python my_set = {1, 2, 3} print(len(my_set)) # 输出:3 ``` 还可以使用其他集合操作,如并集、交集、差集等。例如: ```python set1 = {1, 2, 3} set2 = {3, 4, 5} # 并集 union_set = set1.union(set2) print(union_set) # 输出:{1, 2, 3, 4, 5} # 交集 intersection_set = set1.intersection(set2) print(intersection_set) # 输出:{3} # 差集 difference_set = set1.difference(set2) print(difference_set) # 输出:{1, 2} ``` 这些只是`set`集合的一些基本操作,还有其他更多的方法和操作可以使用,你可以查阅Python的官方文档或者其他教程来了解更多。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值