Java中的贷款模式(又名贷方承租人模式)

这篇文章是关于在Java中实现贷款模式的。

用例

在保存资源的代码与访问资源的代码之间实现分离,从而使访问代码无需管理资源。 当我们编写用于读取/写入文件或查询SQL / NOSQL数据库的代码时,上述用例适用。 在AOP的帮助下,肯定有API处理了此问题。 但是我认为,如果基于模式的方法可以帮助我们处理此类用例,那便是我了解贷款模式 (又称为贷方借出模式)的地方

它能做什么

贷款模式采用“借贷方式”,即保持对调用代码的资源“借贷”的代码。 一旦借方 (访问资源的代码)使用了借方 (没有兴趣),出借方 (即保存资源的代码)就对资源进行管理。 让我们进入贷方代码:

/**
 * This class is an illustration of using loan pattern(a.k.a lender-lendee pattern) 
 * @author prassee
 */
public class IOResourceLender {

	/**
	 * Interface to write data to the buffer. Clients using this
	 * class should provide impl of this interface 
	 * @author sysadmin
	 *
	 */
	public interface WriteBlock {
		void call(BufferedWriter writer) throws IOException;
	}

	/**
	 * Interface to read data from the buffer. Clients using this
	 * class should provide impl of this interface
	 * @author sysadmin
	 *
	 */
	public interface ReadBlock {
		void call(BufferedReader reader) throws IOException;
	}

	/**
	 * method which loans / lends the resource. Here {@link FileWriter} is the 
	 * resource lent. The resource is managed for the given impl of {@link WriteBlock}
	 *  
	 * @param fileName
	 * @param block
	 * @throws IOException
	 */
	public static void writeUsing(String fileName, WriteBlock block)
			throws IOException {
		File csvFile = new File(fileName);
		if (!csvFile.exists()) {
			csvFile.createNewFile();
		}
		FileWriter fw = new FileWriter(csvFile.getAbsoluteFile(), true);
		BufferedWriter bufferedWriter = new BufferedWriter(fw);
		block.call(bufferedWriter);
		bufferedWriter.close();
	}

	/**
	 * method which loans / lends the resource. Here {@link FileReader} is the 
	 * resource lent. The resource is managed for 
	 * the given impl of {@link ReadBlock}
	 *  
	 * @param fileName
	 * @param block
	 * @throws IOException
	 */
	public static void readUsing(String fileName, ReadBlock block)
			throws IOException {
		File inputFile = new File(fileName);
		FileReader fileReader = new FileReader(inputFile.getAbsoluteFile());
		BufferedReader bufferedReader = new BufferedReader(fileReader);
		block.call(bufferedReader);
		bufferedReader.close();
	}
}

贷方代码包含一个FileWriter,资源,我们还期望实现WriteBlock,以便writeUsing方法仅在管理资源内的WriteBlock接口上调用该方法。 在客户端(lendee)一侧,我们提供了WriteBlock的匿名实现。 这是lendee代码,Iam只是给您一个方法,您可以在自己喜欢的类中使用它。

public void writeColumnNameToMetaFile(final String attrName,
			String fileName, final String[] colNames) throws IOException {
		IOResourceLender.writeUsing(fileName,
				new IOResourceLender.WriteBlock() {
					public void call(BufferedWriter out) throws IOException {
						StringBuilder buffer = new StringBuilder();
						for (String string : colNames) {
							buffer.append(string);
							buffer.append(',');
						}
						out.append(attrName + ' = ' + buffer.toString());
						out.newLine();
					}
				});
	}

该示例将借出模式用于简单的文件IO操作。 但是,可以通过提供抽象的贷方和借贷方来进一步改进此代码。本文的代码在以下要点中共享:https://gist.github.com/4481190,我欢迎您的评论和建议!

参考: ScalaPrassee上的 JCG合作伙伴 Prasanna Kumar提供的Java贷款模式(又称贷方借出模式)

翻译自: https://www.javacodegeeks.com/2013/01/loan-pattern-in-java-a-k-a-lender-lendee-pattern.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值