打字猴:1.700467413e+09
1700467413 设计模式之禅 [:1700454010]
1700467414 设计模式之禅 20.3 迭代器模式的应用
1700467415
1700467416 我们在例子中使用了迭代器模式后为什么使原本简单的应用变得复杂起来了呢?那是因为我们在简单的应用中使用了迭代器,在哪?请看代码清单20-3,注意这段话:for(IProject project:projectList),它为什么能够运行起来?还不是因为ArrayList已经实现了iterator()方法,我们才能如此简单地应用。
1700467417
1700467418 从JDK 1.2版本开始增加java.util.Iterator这个接口,并逐步把Iterator应用到各个聚集类(Collection)中,我们来看JDK 1.5的API帮助文件,你会看到有一个叫java.util.Iterable的接口,看看有多少个接口继承了它:BeanContext,BeanContextServices,BlockingQueue<E>,Collection<E>,List<E>,Queue<E>,Set<E>,SortedSet<E>,再看看有它多少个实现类:AbstractCollection,AbstractList,AbstractQueue,AbstractSequentialList,AbstractSet,ArrayBlockingQueue,ArrayList,AttributeList,BeanContextServicesSupport,BeanContextSupport,ConcurrentLinkedQueue,CopyOnWriteArrayList,CopyOnWriteArraySet,DelayQueue,EnumSet,HashSet,JobStateReasons,LinkedBlockingQueue,LinkedHashSet,LinkedList,PriorityBlockingQueue,PriorityQueue,RoleList,RoleUnresolvedList,Stack,SynchronousQueue,TreeSet,Vector,基本上我们经常使用的类都在这个表中了,也正是因为Java把迭代器模式已经融入到基本API中了,我们才能如此轻松、便捷。
1700467419
1700467420 我们再来来看看Iterable接口。java.util.Iterable接口只有一个方法:iterator(),也就说,通过iterator()这个方法去遍历聚集类中的所有方法或属性,基本上现在所有的高级语言都有Iterator这个接口或者实现,Java已经把迭代器给我们准备好了,我们再去写迭代器,就有点多余了。所以呀,这个迭代器模式也有点没落了,基本上很少有项目再独立写迭代器了,直接使用Collection下的实现类就可以完美地解决问题。
1700467421
1700467422 迭代器现在应用得越来越广泛了,甚至已经成为一个最基础的工具。一些大师级人物甚至建议把迭代器模式从23个模式中删除,为什么呢?就是因为现在它太普通了,已经融入到各个语言和工具中了,比如PHP中你能找到它的身影,Perl也有它的存在,甚至是前台的页面技术AJAX也可以有它的出现(如在Struts2中就可以直接使用iterator)。基本上,只要你不是在使用那些古董级(指版本号)的编程语言的话,都不用自己动手写迭代器。
1700467423
1700467424
1700467425
1700467426
1700467427 设计模式之禅 [:1700454011]
1700467428 设计模式之禅 20.4 最佳实践
1700467429
1700467430 如果你是做Java开发,尽量不要自己写迭代器模式!省省吧,使用Java提供的Iterator一般就能满足你的要求了。
1700467431
1700467432
1700467433
1700467434
1700467435 设计模式之禅 [:1700454012]
1700467436 设计模式之禅 第21章 组合模式
1700467437
1700467438 设计模式之禅 [:1700454013]
1700467439 21.1 公司的人事架构是这样的吗
1700467440
1700467441 各位读者,大家在上学的时候应该都学过“数据结构”这门课程吧,还记得其中有一节叫“二叉树”吧,我们上学那会儿这一章节是必考内容,左子树,右子树,什么先序遍历后序遍历,重点就是二叉树的遍历,我还记得当时老师就说,考试的时候一定有二叉树的构建和遍历,现在想起来还是觉得老师是正确的,树状结构在实际中应用非常广泛,想想看你最常使用的XML格式是不是就是一个树形结构。
1700467442
1700467443 咱就先说个最常见的例子,公司的人事管理就是一个典型的树状结构,想想看你公司的组织架构是不是如图21-1所示。
1700467444
1700467445
1700467446
1700467447
1700467448 图21-1 普遍的组织架构
1700467449
1700467450 从最高的老大,往下一层一层的管理,最后到我们这层小兵……很典型的树状结构(说明一下,这不是二叉树,有关二叉树的定义可以翻翻以前的教科书),我们今天的任务就是要把这个树状结构实现出来,并且还要把它遍历一遍,就类似于阅读你公司的人员花名册。
1700467451
1700467452 从该树状结构上分析,有两种不同性质的节点:有分支的节点(如研发部经理)和无分支的节点(如员工A、员工D等),我们增加一点学术术语上去,总经理叫做根节点(是不是想到XML中的那个根节点root,那就对了),类似研发部经理有分支的节点叫做树枝节点,类似员工A的无分支的节点叫做树叶节点,都很形象,三个类型的节点,那是不是定义三个类就可以?好,我们按照这个思路走下去,先看我们自己设计的类图,如图21-2所示。
1700467453
1700467454
1700467455
1700467456
1700467457 图21-2 最容易想到的组织架构类图
1700467458
1700467459 这个类图是初学者最容易想到的类图(首先声明,这个类图是有缺陷的,如果你已经看明白这个类图的缺陷了,该段落就可以一目十行地看下去,我们是循序渐进地讲课,一步一个脚印),非常简单,我们来看一下如何实现,先看最高级别的根节点接口,如代码清单21-1所示。
1700467460
1700467461 代码清单21-1 根节点接口
1700467462
[ 上一页 ]  [ :1.700467413e+09 ]  [ 下一页 ]