`
DarkMeteor
  • 浏览: 11759 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

模板和回调模式

阅读更多
package xxx;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import com.xxx.common.logging.Logger;
import com.xxx.common.logging.LoggerFactory;

/**
 * 文件模板工具类
 * 
 * @author xu.le
 * @version $Id: FileTemplate.java,v 0.1 2010-9-8 上午10:38:23 xu.le Exp $
 */
public class FileTemplate {
    
    
    private static final Logger logger = LoggerFactory.getLogger(FileTemplate.class);

    /**
     * 
     * 
     * @param buffer
     * @param baseDir
     * @param fileName
     */
    public static void upload(final byte[] buffer, final String baseDir, final String fileName) {
        executeTemplate(new CallBack() {
            public OutputStream callBack() {
                File file = new File(baseDir, fileName);
                File parent = file.getParentFile();
                if (!parent.exists()) {
                    parent.mkdirs();
                    if (logger.isInfoEnabled()) {
                        logger.info("尝试创建目录:");
                    }
                }
                if (!file.exists()) {
                    OutputStream out = null;
                    try {
                        out = new FileOutputStream(file);
                        out.write(buffer);
                    } catch (FileNotFoundException e) {
                        if (logger.isInfoEnabled()) {
                            logger.info("文件无法找到异常", e);
                        }
                    } catch (IOException e) {
                        if (logger.isInfoEnabled()) {
                            logger.info("文件写入异常", e);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    return out;
                }
                if (logger.isInfoEnabled()) {
                    logger.info("文件已经存在,不重新生成,文件为" + file);
                }
                return null;
            }
        });
    }

    /**
     * 
     * @param callBack
     */
    private static void executeTemplate(CallBack callBack) {
        OutputStream out = callBack.callBack();
        if (out != null) {
            try {
                out.close();
            } catch (IOException e) {
                if (logger.isInfoEnabled()) {
                    logger.info("OutputStream close error!", e);
                }
            }
        }
    }

    /**
     * 
     * @author xu.le
     * @version $Id: CallBack.java,v 0.1 2010-9-8 上午10:41:50 xu.le Exp $
     */
    private interface CallBack {

        public OutputStream callBack();
    }
}

 

分享到:
评论

相关推荐

    【转】Spring中模板模式和回调模式的讲解

    在Spring框架中,模板模式和回调模式是两种重要的设计模式,它们被广泛应用于处理各种不同的任务,如数据访问、远程调用等。这两种模式都旨在提高代码的可扩展性和复用性,使得开发者能够以更加灵活的方式处理业务...

    适用于参数传递和回调的C++模板类

    1. **模板回调接口**:定义一个通用的模板类,用于表示回调。它可以是一个函数对象或者包含一个虚函数,通过模板参数确定回调的签名。 2. **回调注册**:在`ccallbackmanager`中实现一个接口,允许用户注册回调,...

    59丨模板模式(下):模板模式与Callback回调函数有何区别和联系?1

    回调函数和模板模式都是软件设计中用于实现代码复用和扩展的重要工具,它们在不同的场景下各有优势。模板模式是一种行为设计模式,它定义了一组操作的算法骨架,同时允许子类在某些步骤中替换具体行为。而回调则是...

    Spring 学习 JdbcTemplate,模板模式,回调

    本主题将深入探讨Spring框架中的JdbcTemplate组件,以及模板模式和回调机制的概念。 **1. Spring JdbcTemplate** JdbcTemplate是Spring提供的一个用于简化数据库操作的API,它是Spring对JDBC(Java Database ...

    C++回调模板类的例子

    在C++编程中,回调是一种常见的设计模式,它允许我们将一个函数作为参数传递给另一个函数,以便在适当的时候被调用。回调函数通常用于事件处理、异步操作或任何需要在特定条件满足时执行的代码。在这个例子中,我们...

    亲测完整微信企业号回调模式URL验证代码

    回调模式URL验证是确保通信双方身份合法性的过程,防止中间人攻击和其他安全风险。这里,我们将深入探讨微信企业号回调模式URL验证的核心知识点,并提供一个亲测有效的代码示例。 1. 微信企业号回调模式概述: - ...

    19.C#中委托、事件和回调函数的理解.pdf

    总结来说,委托、事件和回调函数是C#中用于实现解耦和事件驱动编程的重要机制。委托可以引用方法,事件是特殊的委托,通过事件发布者和订阅者模型允许对象之间进行通信。回调函数则是委托的一种应用,它允许在特定...

    易语言类回调新

    "类回调新"是易语言中一个重要的概念,它涉及到面向对象编程中的类和回调机制。在这个场景下,"类回调新"可能是指一种更新的或者优化的类回调实现方式。 在易语言中,类是对象的模板,定义了一组属性(数据成员)和...

    vc回调函数例子

    在C++编程中,回调函数是一种机制,允许...通过实践和不断学习,你可以创建更复杂、更高效的回调机制,例如使用类成员函数作为回调,或者利用现代C++特性如std::function和lambda表达式,让回调函数更加灵活和强大。

    oss文件上传(带回调)

    【标题】"OSS文件上传(带回调)"指的是在Spring Boot应用中集成对象存储服务(Object Storage Service,简称OSS),并实现文件上传功能,同时具备回调机制,即在文件上传完成后,系统会自动执行预设的回调函数,通常...

    C++中回调(CallBack)的使用思路

    通过上述模板化的实现方式,我们可以更加灵活地在C++程序中使用回调机制。这种方式不仅提高了代码的安全性,还增强了代码的可读性和可扩展性,使得回调功能在复杂的应用场景下变得更加可靠和高效。无论是处理复杂的...

    策略模式结合模板方法模式

    在这种情况下,策略模式可以有三种实现方式:一是在上下文中实现公共功能,让所有具体的策略算法回调这些方法;二是把策略的接口改成抽象类,然后在里面实现具体算法的公共功能;三是给所有的策略算法定义一个抽象的...

    浅显易懂的回调函数程序

    3. 模板和函数对象:可以定义模板函数或函数对象,它们可以封装任意类型的函数,从而实现更灵活的回调机制。 4. lambda表达式:在C++11及以后的版本中,lambda表达式提供了一种简洁的创建匿名函数的方式,也常用于...

    回调函数机制

    回调函数机制是一种编程模式,它允许在程序运行过程中,将一个函数的地址传递给另一个函数,以便在特定时机被调用。这种机制在C语言中尤为重要,因为它允许程序在运行时动态地将函数绑定到调用点上,从而提供了更大...

    DLL回调函数Demo

    2. 在新创建的DLL项目中,添加头文件(.h)和实现文件(.cpp),定义回调函数的接口。 例如,我们可以在头文件(CallBackDLL.h)中声明回调函数的原型: ```cpp #ifndef CALLBACKDLL_H #define CALLBACKDLL_H ...

    微信企业号回调模式设置图解(PHP版).docx

    微信企业号提供了一种强大的消息推送机制,即“回调模式”,允许企业通过自定义服务器接收来自微信的消息,从而实现更灵活的服务响应和数据处理。本文将详细介绍如何设置微信企业号的回调模式,并解决其中常见的...

    回调函数,使用c++做的例子

    2. **模板化**:可以通过模板化来增加回调函数的通用性,使其能够接受不同类型的参数。 ```cpp template void CallPrintfText(std::function(T)> callfuct, T s) { callfuct(s); } int main() { ...

    PHP微信企业号开发之回调模式开启与用法示例

    因此,熟悉官方文档,理解微信企业号的通信机制,以及掌握`WXBizMsgCrypt`类的使用,对于成功实现回调模式至关重要。同时,遇到问题时要有耐心,仔细检查配置和代码,确保与官方示例保持一致,并及时更新以适应微信...

Global site tag (gtag.js) - Google Analytics