Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ประกาศ Constructor เป็น Private ใน Java ได้ไหม?

ได้ สามารถประกาศ 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 ได้แน่ๆ
}

สรุป

PatternConstructorใช้เมื่อไหร่
SingletonPrivateInstance เดียวตลอด JVM
Utility ClassPrivateStatic Methods เท่านั้น
FactoryPrivateควบคุมการสร้าง Object
Normal ClassPublic/Protected/Defaultทั่วไป