import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.concurrent.TimeUnit;
// The main method must be in a class named "Main".
class Main {
public static void main(String[] args) {
DatabaseService proxyDatabaseService = new ProxyDatabaseService();
System.out.println("First Execution:");
System.out.println(proxyDatabaseService.query("SELECT * FROM users"));
System.out.println("\nSecond Execution:");
System.out.println(proxyDatabaseService.query("SELECT * FROM users"));
}
}
// Subject Interface
interface DatabaseService {
String query(String sql);
}
// Real Subject
class RealDatabaseService implements DatabaseService {
@Override
public String query(String sql) {
System.out.println("Querying database...");
// Simulate database query delay
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
}
return "Result of query: " + sql;
}
}
// Proxy Handler
class ProxyDatabaseService implements DatabaseService {
private final RealDatabaseService realService;
private final Map<String, String> cache;
public ProxyDatabaseService() {
this.realService = new RealDatabaseService();
this.cache = new HashMap<>();
}
@Override
public String query(String sql) {
// Check cache
if (cache.containsKey(sql)) {
System.out.println("Returning result from cache");
return cache.get(sql);
}
String result = realService.query(sql);
cache.put(sql, result);
return result;
}
}
To embed this project on your website, copy the following code and paste it into your website's HTML: