知识大全 合成模式

Posted 文件

篇首语:一身转战三千里,一剑曾当百万师。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 合成模式相关的知识,希望对你有一定的参考价值。

Java与模式:合成模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

    合成(Composite)模式是一种非常重要的设计模式 合成模式将对象组织到树中 用来描述树的关系     一 原理图       从原理图可见 File Folder都可以同等看待苇IFile 为对象管理提供了极大的便利     当然 树的概念不单单是文件文件夹的层次概念 只是因为这个很形象 实际中还有很多树的概念 比如组织机构 分类层次等等 都是逻辑上的概念 不管是物理上的还是逻辑上的 在Java里都是一样处理的     二 实例下面以一个逻辑树为例子 以上面的原理图为蓝本 看看如何实现并如何使用这个树 这个结构很简单 但是如何去使用树 遍历树 为我所用还是有一定难度的     这里主要用到树的递归遍历 如何递归 如何控制遍历层级 如何将逻辑关系转换为(类似)物理关系 这些都是有相当难度的     废话就不说了 看看便知   /** * Created by IntelliJ IDEA * User: leizhimin * Date: : : * 抽象文件角色 */ public interface IFile     //返回自己的实例     IFile getComposite();     //某个商业方法     void sampleOperation();     //获取深度     int getDeep();     //设置深度     void setDeep(int x);   import java util Vector; /** * Created by IntelliJ IDEA * User: leizhimin * Date: : : * 文件夹角色 */ public class Folder implements IFile     private String name;    //文件名字     private int deep;       //层级深度 根深度为     private Vector<IFile> ponentVector = new Vector<IFile>();     public Folder(String name)         this name = name;          //返回自己的实例     public IFile getComposite()         return this;          //某个商业方法     public void sampleOperation()         System out println( 执行了某个商业方法! );          //增加一个文件或文件夹     public void add(IFile IFile)         ponentVector addElement(IFile);         IFile setDeep(this deep + );          //删除一个文件或文件夹     public void remove(IFile IFile)         ponentVector removeElement(IFile);          //返回直接子文件(夹)集合     public Vector getAllComponent()         return ponentVector;          public String getName()         return name;          public void setName(String name)         this name = name;          public int getDeep()         return deep;          public void setDeep(int deep)         this deep = deep;        /** * Created by IntelliJ IDEA * User: leizhimin * Date: : : * 文件 */ public class File implements IFile     private String name;    //文件名字     private int deep;       //层级深度     public File(String name)         this name = name;          //返回自己的实例     public IFile getComposite()         return this;          //某个商业方法     public void sampleOperation()         System out println( 执行了某个商业方法! );          public String getName()         return name;          public void setName(String name)         this name = name;          public int getDeep()         return deep;          public void setDeep(int deep)         this deep = deep;        import java util Iterator; import java util Vector; /** * Created by IntelliJ IDEA * User: leizhimin * Date: : : * 遍历树的一个测试 */ public class Client     public static String indentChar = \\t ;       //文件层次缩进字符     public static void main(String args[])         new Client() test();          /**      * 客户端测试方法      */     public void test()         //根下文件及文件夹         Folder root = new Folder( 树根 );         Folder b _ = new Folder( _枝 );         Folder b _ = new Folder( _枝 );         Folder b _ = new Folder( _枝 );         File l _ = new File( _叶 );         File l _ = new File( _叶 );         File l _ = new File( _叶 );         //b _ 下的文件及文件夹         Folder b _ = new Folder( _枝 );         Folder b _ = new Folder( _枝 );         File l _ = new File( _叶 );         //缔造树的层次关系(简单测试 没有重复添加的控制)         root add(b _ );         root add(b _ );         root add(l _ );         root add(l _ );         b _ add(b _ );         b _ add(b _ );         b _ add(l _ );         root add(l _ );         root add(b _ );         //控制台打印树的层次         outTree(root);          public void outTree(Folder folder)         System out println(folder getName());         iterateTree(folder);          /**      * 遍历文件夹 输入文件树      *      * @param folder      */     public void iterateTree(Folder folder)         Vector<IFile> clist = folder getAllComponent();         //todo:遍历之前可以对clist进行排序 这些都不是重点         for (Iterator<IFile> it = erator(); it hasNext();)             IFile em = it next();             if (em instanceof Folder)                 Folder cm = (Folder) em;                 System out println(getIndents(em getDeep()) + cm getName());                 iterateTree(cm);              else                 System out println(getIndents(em getDeep()) + ((File) em) getName());                                /**      * 文件层次缩进字符串      *      * @param x 缩进字符个数      * @return 缩进字符串      */     public static String getIndents(int x)         StringBuilder sb = new StringBuilder();         for (int i = ; i < x; i++)             sb append(indentChar);                  return sb toString();          三 运行测试     控制台输出如下           可见 树逻辑关系已经成功展示出来了     四 总结 上面所用的合成模式是安全合成模式 所谓的安全是指File与Folder中的方法不同 Folder有对聚集对象的管理 File没有     合成模式在程序设计中有着广泛的应用 比如Dom j 资源管理器 Java GUI容器层次图等等都是合成模式应用的典范     合成模式很多都是需要分析思考才能鉴别出来的 比如要做一个复杂的数学表达式计算器 有四种运算符号 分析发现 运算量有两种 一种是数字 一种是数字的表达式 但是表达式也是由数字组成 因此数字和表达式可以抽象为运算量 然后去表达要运算的表达式 问题迎刃而解     原文出处 cha138/Article/program/Java/gj/201311/27351

相关参考

知识大全 设计模式与VB .net代码 外观模式,合成模式

设计模式与VB.net代码外观模式,合成模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  外观

什么是母体基因?举例说明母体基因对果蝇发育模式的调控作用。

在卵母细胞成熟过程中,在看护细胞中转录,然后将合成的mRNA运送到卵母细胞的基因。由于这些mRNA翻译合成的蛋白质在早期胚胎发育中调节合子基因的转录,故此将它们称为母体基因。在成熟的未受精的卵细胞中,

有机茶园常见病虫害及防治措施

有机农业是指一种不使用人工合成的化肥、农药、生长调节剂和饲料添加剂的农业生产体系。发展有机农业是遵守农业可持续发展的新型农业模式。由于在生产过程中不得使用任何人工合成的农药,所以病虫害防治成了有机茶叶

有机茶园常见病虫害及防治措施

有机农业是指一种不使用人工合成的化肥、农药、生长调节剂和饲料添加剂的农业生产体系。发展有机农业是遵守农业可持续发展的新型农业模式。由于在生产过程中不得使用任何人工合成的农药,所以病虫害防治成了有机茶叶

未来科学技术 合成肉、合成鱼、合成虾

   人类即使是为了完善食品营养、换换新口味、也应该创造丰富的新食品,况且人类还面临食品短缺的严重局面呢。如今科学家们正在努力寻找食品的新来源。  &

政府管理的创新模式主要有效率驱动模式、小型化与分权模式、追求卓越模式和__

政府管理的创新模式主要有效率驱动模式、小型化与分权模式、追求卓越模式和_____。A、公共管理市场模式B、公共管理创新模式C、公共服务取向模式D、公共服务购买模式答案:C解析:随着全球化时代的来临,人

合成香料废水处理

关键词:合成香料废水处理物理法化学法香料是一种能被嗅觉嗅出香气或被味觉尝出的香味的物质,是配制香精的原料,主要分为天然香料和合成香料;天然香料又可分为动物性天然香料和植物性天然香料。合成香料包括全合成

合成香料废水处理

关键词:合成香料废水处理物理法化学法香料是一种能被嗅觉嗅出香气或被味觉尝出的香味的物质,是配制香精的原料,主要分为天然香料和合成香料;天然香料又可分为动物性天然香料和植物性天然香料。合成香料包括全合成

合成香料废水处理

关键词:合成香料废水处理物理法化学法香料是一种能被嗅觉嗅出香气或被味觉尝出的香味的物质,是配制香精的原料,主要分为天然香料和合成香料;天然香料又可分为动物性天然香料和植物性天然香料。合成香料包括全合成

用生物技术选育抗螟玉米自交系杂交种子的方法

本发明涉及用生物技术选育抗螟玉米自交系杂交种子的方法,其特征是按照作物遗传规律,抗螟基因是受抗螟的主效基因即质量性状遗传所决定的,在抗螟优势模式下合成原始材料定向选育:1)选择育种,2)杂交育种,3)