`
lichaozhangobj
  • 浏览: 100899 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

转:安全合成模式

 
阅读更多

合成模式把部分和整体的关系用树结构表示出来。使客户端把一个个单独的成分对象和由它们复合而成的合成对象同等看待。

 

public interface IFile {

    //返回自己的实例 
    IFile getComposite(); 

    //某个商业方法 
    void sampleOperation(); 

    //获取深度 
    int getDeep(); 

    //设置深度 
    void setDeep(int x); 
}

 

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("sampleOperation");
    }

    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;
    }
}

 

public class Folder implements IFile{
    
    private String name = null;    //文件名字 
    private int deep;              //层级深度,根深度为0 
    private Vector<IFile> componentVector = new Vector<IFile>(); 

    public Folder(String name) { 
        this.name = name; 
    } 
    //返回自己的实例
    public IFile getComposite() {
        return this;
    }

    public void sampleOperation() {
        System.out.println("sampleOperation"); 
    }
    //增加一个文件或文件夹 
    public void add(IFile iFile) { 
        componentVector.add(iFile);
        iFile.setDeep(this.deep + 1); 
    }
    //删除一个文件或文件夹 
    public void remove(IFile iFile) { 
        componentVector.removeElement(iFile); 
    } 
    //返回直接子文件(夹)集合
    @SuppressWarnings("unchecked")
    public Vector getAllComponent() { 
        return componentVector; 
    } 

    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; 
    } 
}

 

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 b1_1 = new Folder("1_枝1");
        Folder b1_2 = new Folder("1_枝2");
        Folder b1_3 = new Folder("1_枝3");
        File l1_1 = new File("1_叶1");
        File l1_2 = new File("1_叶2");
        File l1_3 = new File("1_叶3");

        // b1_2下的文件及文件夹
        Folder b2_1 = new Folder("2_枝1");
        Folder b2_2 = new Folder("2_枝2");
        File l2_1 = new File("2_叶1");

        // 缔造树的层次关系(简单测试,没有重复添加的控制)
        root.add(b1_1);
        root.add(b1_2);
        root.add(l1_1);
        root.add(l1_2);

        b1_2.add(b2_1);
        b1_2.add(b2_2);
        b1_2.add(l2_1);
        root.add(l1_3);
        root.add(b1_3);
        // 控制台打印树的层次
        outTree(root);
    }

    public void outTree(Folder folder) {
        System.out.println(folder.getName());
        iterateTree(folder);
    }

    /**
     * 遍历文件夹,输入文件树
     * 
     * @param folder
     */
    @SuppressWarnings("unchecked")
    public void iterateTree(Folder folder) {
        Vector<IFile> clist = folder.getAllComponent();
        for (IFile file : clist) {
            if (file instanceof Folder) {
                Folder cm = (Folder) file;
                System.out.println(getIndents(file.getDeep()) + cm.getName());
                iterateTree(cm);
            } else {
                System.out.println(getIndents(file.getDeep()) + ((File) file).getName());
            }
        }
    }

    /**
     * 文件层次缩进字符串
     * 
     * @param x
     *            缩进字符个数
     * @return 缩进字符串
     */
    public static String getIndents(int x) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < x; i++) {
            sb.append(indentChar);
        }
        return sb.toString();
    }
}

 

分享到:
评论

相关推荐

    设计模式之合成模式Java实现和类设计图

    在描述中提到的两种实现方式——安全式(Safe)和透明式(Transparent)合成模式,主要区别在于如何处理对叶子节点和组合节点的访问: - **安全式**:强调对组合对象和叶子对象进行区分,只有当尝试访问的节点是...

    合成生物行业深度报告:合成生物乘势而起,颠覆传统引领未来.pdf

    在合成生物行业的商业模式中,主要分为产品型和平台型。产品型企业,如华恒生物、凯赛生物、新日恒力、圣泉集团、科拓生物、三元生物、金丹科技和利尔化学等,它们通过完整的产业链,从生物改造、发酵纯化到产品改性...

    JAVA常用设计模式

    - **合成模式**:合成模式用于表示部分-整体的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 - **装饰模式**:装饰模式动态地给对象添加新的行为或职责,提供了比继承更灵活的扩展机制。 - **门面...

    Java中的23种设计模式

    8. 合成模式:结构型模式,用于描述部分-整体的关系,通过组合而不是继承实现。合成模式让客户端可以以一致的方式处理单个对象和对象集合。 9. 装饰模式:结构型模式,动态地给一个对象添加新的行为,是实现继承的...

    设计模式学习笔记总结

    这里我们聚焦于C#语言中的设计模式学习笔记,涵盖了多种经典的设计模式,如合成模式、桥梁模式、装饰模式、享元模式、门面模式、命令模式、工厂方法、策略模式、代理模式以及状态模式。下面将对这些模式逐一进行详细...

    能源化工行业合成生物学深度专题:合成生物乘势而起,颠覆传统引领未来.pdf

    然而,合成生物学的发展也面临一些风险,包括项目实施进度延迟、生物质原材料价格波动、经济和下游行业不确定性、国际贸易环境变化以及生物安全和伦理问题。尽管如此,鉴于其在碳中和趋势下的独特优势和巨大的市场...

    腾讯研究院-AI生成内容发展报告2020:“深度合成”商业化元年(电子版)-2020.5-30页精品报告.pdf

    例如,深度合成技术在娱乐(如电影后期制作)、媒体(如新闻生成)、安全(如身份验证)等方面的潜在应用。 6. 法律法规与伦理问题: 随着深度合成技术的发展,可能会出现法律、伦理和社会问题,例如知识产权侵犯...

    合成数据生成:生成合成数据

    合成数据生成技术是一种在保护隐私和安全的同时,用于模拟真实数据的方法。在现代信息技术中,尤其是在数据分析、机器学习和人工智能领域,对大量数据的需求日益增长。然而,由于隐私法规的限制,许多敏感信息不能...

    设计模式

    合成模式是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。合成模式使得客户端可以一致地处理单个对象和组合对象,简化了对对象集合的操作。 9. 装饰器模式(Decorator): 装饰...

    化工行业深度报告:合成生物学——属于未来的生产方式.pdf

    合成生物学的本质是让细胞为人类工作生产想要的物质,与传统化学合成相比,合成生物学具有微型化、可循环、更安全的特点;与传统发酵工程相比,合成生物学对细胞的干预是定向的。合成生物学有望移步幕前,成为人类...

    JAVA与模式

    在安全式的合成模式中,管理子对象的方法仅出现在树枝构件类中,而非抽象构件类中。这意味着树叶构件类无需关心管理子对象的问题,这有助于避免潜在的安全问题和错误。 **安全式合成模式的实现示例:** - **抽象...

    java的23种设计模式

    7. **合成模式**(Composite) - **模式名称**:合成模式 - **问题**:需要处理树形结构中的对象。 - **解决方案**:将对象组合成树形结构,以便客户能够统一处理单个对象和复合对象。 - **效果**:简化了客户端...

    was,资源合成器

    在Photoshop中,可以利用图层功能进行精细调整,如添加效果、混合模式或调整透明度,以优化游戏画面的表现。完成修改后,用户还可以进一步将TGA文件转换为其他格式,如GIF,这是一种支持动画的格式,广泛应用于网页...

    设计模式复习题.docx

    9. 代理模式:结构型模式,为其他对象提供一种代理以控制对这个对象的访问,可以用于增加安全性、控制访问等。 10. 适配器模式:结构型模式,将不兼容的接口转换为用户期望的接口,使原本不兼容的类可以协同工作。 ...

    科大讯飞语音合成TTS在线接口forPHP

    【科大讯飞语音合成就绪】 ...综上,科大讯飞的语音合成TTS在线接口为PHP开发者提供了一个高效且灵活的工具,通过简单的API调用,即可实现高质量的文本转语音功能,大大增强了应用的互动性和可用性。

    科大讯飞语音合成demo

    本文将基于“科大讯飞语音合成demo”项目,详细介绍如何利用科大讯飞的SDK进行语音合成,并探讨在线与离线模式的应用场景与差异。 首先,科大讯飞的语音合成技术(TTS,Text To Speech)能够将文本转换为自然流畅的...

    设计模式的精简版

    - 代理模式:为对象提供代理以控制对原对象的访问,可以用于远程代理、虚拟代理、安全代理等。 - 外观模式:提供一个简单的接口来访问复杂的子系统,降低了系统的复杂度。 - 桥接模式:将抽象部分与实现部分分离...

Global site tag (gtag.js) - Google Analytics