Sync Factory Method, Abstract Factory, Builder, Prototype to Java 25; fix post/code mismatches
This commit is contained in:
19
01-creational/singleton/AppConfig.java
Normal file
19
01-creational/singleton/AppConfig.java
Normal file
@@ -0,0 +1,19 @@
|
||||
package singleton;
|
||||
public class AppConfig {
|
||||
|
||||
private AppConfig() {
|
||||
System.out.println("Reading configuration from file...");
|
||||
}
|
||||
|
||||
private static class Holder {
|
||||
static final AppConfig INSTANCE = new AppConfig();
|
||||
}
|
||||
|
||||
public static AppConfig getInstance() {
|
||||
return Holder.INSTANCE;
|
||||
}
|
||||
|
||||
public String getProperty(String key) {
|
||||
return System.getProperty(key, "(not set)");
|
||||
}
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
package singleton;
|
||||
|
||||
/**
|
||||
* Thread-safe Singleton using double-checked locking.
|
||||
*/
|
||||
public class DatabaseConnection {
|
||||
private static volatile DatabaseConnection instance;
|
||||
private final String url;
|
||||
private int queryCount = 0;
|
||||
|
||||
private DatabaseConnection() {
|
||||
this.url = "jdbc:mysql://localhost:3306/myapp";
|
||||
System.out.println("Establishing connection to " + url);
|
||||
}
|
||||
|
||||
public static DatabaseConnection getInstance() {
|
||||
if (instance == null) {
|
||||
synchronized (DatabaseConnection.class) {
|
||||
if (instance == null) {
|
||||
instance = new DatabaseConnection();
|
||||
}
|
||||
}
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
public String executeQuery(String sql) {
|
||||
queryCount++;
|
||||
return "Result #" + queryCount + " for: " + sql;
|
||||
}
|
||||
|
||||
public int getQueryCount() { return queryCount; }
|
||||
public String getUrl() { return url; }
|
||||
}
|
||||
@@ -1,19 +1,9 @@
|
||||
package singleton;
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
System.out.println("=== Singleton Pattern Demo ===\n");
|
||||
|
||||
DatabaseConnection c1 = DatabaseConnection.getInstance();
|
||||
DatabaseConnection c2 = DatabaseConnection.getInstance();
|
||||
DatabaseConnection c3 = DatabaseConnection.getInstance();
|
||||
|
||||
System.out.println("\nAll three references same instance? " + (c1 == c2 && c2 == c3));
|
||||
|
||||
System.out.println(c1.executeQuery("SELECT * FROM users"));
|
||||
System.out.println(c2.executeQuery("SELECT * FROM orders"));
|
||||
System.out.println(c3.executeQuery("SELECT COUNT(*) FROM products"));
|
||||
|
||||
System.out.println("\nTotal queries: " + c1.getQueryCount());
|
||||
AppConfig config1 = AppConfig.getInstance();
|
||||
AppConfig config2 = AppConfig.getInstance();
|
||||
System.out.println("Same instance? " + (config1 == config2)); // true
|
||||
System.out.println("db.url = " + config1.getProperty("db.url"));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user