Added example code for Execute Around idiom.

This commit is contained in:
Ilkka Seppala
2015-03-29 21:25:13 +03:00
parent eee2160435
commit 027fd9934b
6 changed files with 106 additions and 0 deletions

View File

@ -0,0 +1,30 @@
package com.iluwatar;
import java.io.FileWriter;
import java.io.IOException;
/**
* The Execute Around idiom specifies some code to be executed before and after
* a method. Typically the idiom is used when the API has methods to be executed in
* pairs, such as resource allocation/deallocation or lock acquisition/release.
*
* In this example, we have SimpleFileWriter class that opens and closes the file
* for the user. The user specifies only what to do with the file by providing the
* FileWriterAction implementation.
*
*/
public class App {
public static void main( String[] args ) throws IOException {
new SimpleFileWriter("testfile.txt", new FileWriterAction() {
@Override
public void writeFile(FileWriter writer) throws IOException {
writer.write("Hello");
writer.append(" ");
writer.append("there!");
}
});
}
}

View File

@ -0,0 +1,15 @@
package com.iluwatar;
import java.io.FileWriter;
import java.io.IOException;
/**
*
* Interface for specifying what to do with the file resource.
*
*/
public interface FileWriterAction {
void writeFile(FileWriter writer) throws IOException;
}

View File

@ -0,0 +1,23 @@
package com.iluwatar;
import java.io.FileWriter;
import java.io.IOException;
/**
*
* SimpleFileWriter handles opening and closing file for the user. The user
* only has to specify what to do with the file resource through FileWriterAction
* parameter.
*
*/
public class SimpleFileWriter {
public SimpleFileWriter(String filename, FileWriterAction action) throws IOException {
FileWriter writer = new FileWriter(filename);
try {
action.writeFile(writer);
} finally {
writer.close();
}
}
}

View File

@ -0,0 +1,19 @@
package com.iluwatar;
import java.io.IOException;
import org.junit.Test;
/**
*
* Tests execute-around example.
*
*/
public class AppTest {
@Test
public void test() throws IOException {
String[] args = {};
App.main(args);
}
}