簡體   English   中英

如何防止具體類的實例化?

[英]How to Prevent instantiation of concrete classes?

可以說我有一個Record接口,可以有N個具體的實現類,例如。 PropertyRecordsLoanRecords等如何確保客戶端使用new關鍵字創建的這N個類中沒有對象?

如果我只有一個子類,這很容易;我可以將所有構造函數包設為私有;這樣我就可以在同一包中編寫一個Factory類,該類將具有負責創建實例的方法。 Factory能夠創建單個接口或抽象類的多個實現。

希望我能正確表達自己的意見。請詢問是否需要任何說明。

謝謝。

不知道為什么要這么做,但是Factory類可以使用反射來創建如下實例:

public class RecordFactory {
    public Record newInstance(Class<? extends Record> klass, Object... args) {
        Constructor[] ctors = klass.getDeclaredConstructors();
        // find the right constructor here..
        return ctor.newInstance(args);
    }
}

然后,您的客戶端可以創建如下實例:

RecordFactory.newInstance(Loan.class, ...);

我不確定我是否理解您要實現的目標(對此沒有評論),但是我的想法是:

  1. 聽起來您真正想要的是實現Flyweight設計模式( http://en.wikipedia.org/wiki/Flyweight_pattern )。
  2. 如果您真的想按照描述來實現它(同樣,以我理解正確的假設為前提),則應該可以執行以下操作:

     public class Record { private static final int MAX_INSTANCES = 20; private static volatile int instanceCounter = 0; private Record() { if (instanceCounter >= MAX_INSTANCES) throw new RuntimeException("max instances exceeded"); instanceCounter ++; } } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM