借贷模式

借贷模式

http://blog.csdn.net/zl3450341/article/details/24658755


我们不需要关注Scanner怎么创建,用完以后怎么关闭我们只要专注于业务逻辑即可。


package newwork.loan;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

/**
 * Created by chin on 7/24/15.
 */
public class ResourceHolder {


    public static void main(String[] args) throws FileNotFoundException {


        // 需求打开一个文件输出文件中的每一行

        /**
         * 通常的做法如下
         */

        // 创建file对象
        File ignoreFile = new File("./.gitignore");
        // 创建Scanner对象
        Scanner sc = new Scanner(ignoreFile);
        while (sc.hasNext()) {
            System.out.println(sc.next());
        }
        sc.close();         // 注意:我们要自己处理关闭的操作



        /**
         * 借贷模式的做法
         */

        // 传入一个file对象,一个接口,这个接口有个doTask方法,这个方法需要的参数是Scanner
        // Scanner是桥梁
        withScanner(new File("./.gitignore"), new TaskHandler() {
            @Override
            public void doTask(Scanner scanner) {
                while (scanner.hasNext()) {
                    System.out.println(scanner.next());
                }
            }
        });
    }


    public static void withScanner(File file, TaskHandler handler) throws FileNotFoundException {
        // 根据传入的file对象,创建scanner
        Scanner scanner = new Scanner(file);
        try {
            // 把scanner对象传到handler对象的doTask方法中
            handler.doTask(scanner);
        } finally {
            // 关闭scanner
            scanner.close();
        }

        // 注意调用withScanner方法的地方就不用处理关闭的操作了,更加便捷
        // 外部调用的地方也不用try-catch了
    }

    public interface TaskHandler {
        void doTask(Scanner scanner);       //doTask方法接受scanner参数,如何理解
    }
}

试着比较两种调用方法,那个更加简洁?

早期用hibernate与spring集成的时候,大家写BaseDao,为了保证session在spring管控范围内,是不是写过这样的代码:


public List findByPage(final String hql,final int offset,final int pageSize){
	List list = getHibernateTemplate().executeFind(
               new HibernateCallback(){
               		public Object doInHibernate(Session session){
                            List result = session.createQuery(hql)
                                    .setFirstResult(offset)
                                    .setMaxResults(pageSize)
                                    .list();
				return result;
			}
		});
	return list;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值