ได้ สามารถประกาศ Constructor เป็น Private ได้ แต่จะ สร้าง Object ไม่ได้จากภายนอก ใช้ใน Singleton Design Pattern
เงื่อนไข Constructor Private
- ไม่สามารถ Subclass (Extend) ได้ (Compile Error)
- ไม่สามารถ new Object จากภายนอก ได้
- เหมาะสำหรับ Class ที่มี Static Methods เท่านั้น (Utility Class)
- เหมาะสำหรับ Class ที่มี Constants เท่านั้น
- พยายาม Extend Class ที่มี Private Constructor → Compile Time Error
ตัวอย่าง Singleton Pattern
class SingletonObject {
// Private Constructor
private SingletonObject() {
System.out.println("In a private constructor");
}
// Static Factory Method
public static SingletonObject getObject() {
if (ref == null) {
ref = new SingletonObject(); // เรียก Private Constructor ได้ภายในคลาส
}
return ref;
}
private static SingletonObject ref;
}
public class PrivateConstructorDemo {
public static void main(String args[]) {
SingletonObject sObj = SingletonObject.getObject();
// SingletonObject obj = new SingletonObject(); // COMPILE ERROR!
}
}
ผลลัพธ์
In a private constructor
Use Cases อื่นๆ
1. Utility Class (Static Methods Only)
public final class MathUtils {
private MathUtils() { } // ป้องกัน Instantiation
public static int add(int a, int b) { return a + b; }
public static int max(int a, int b) { return Math.max(a, b); }
}
2. Factory Pattern (Controlled Creation)
public class DatabaseConnection {
private DatabaseConnection(String url) { /* ... */ }
public static DatabaseConnection create(String url) {
// Validation, Pooling, Configuration
return new DatabaseConnection(url);
}
}
3. Prevent Subclassing
public final class ImmutableClass {
private ImmutableClass() { } // Private + Final Class = ไม่ Extend ได้แน่ๆ
}
สรุป
| Pattern | Constructor | ใช้เมื่อไหร่ |
|---|---|---|
| Singleton | Private | Instance เดียวตลอด JVM |
| Utility Class | Private | Static Methods เท่านั้น |
| Factory | Private | ควบคุมการสร้าง Object |
| Normal Class | Public/Protected/Default | ทั่วไป |