[英]Using Singleton with Interfaces Java
我想知道,如何使用帶有接口的單例模式? 我創建了一個界面:
public interface BuisinessService {
BuisinessService getInstance();
}
我做了這個實現:
public class BuisinessServiceImpl implements BuisinessService {
private static BuisinessServiceImpl instance = null;
private BuisinessServiceImpl(){ }
@Override
public BuisinessServiceImpl getInstance() {
if (instance == null) {
BuisinessServiceImpl.instance = new BuisinessServiceImpl();
}
return BuisinessServiceImpl.instance;
}
}
如何從我的主類訪問getInstance? 我嘗試了一些想法
private BuisinessService service = new BuisinessServiceImpl();
(不起作用 - BuisinessServiceImpl()的構造函數是私有的)
但還有什么? 你能幫我嗎?
編輯 :我正在使用Java Spring! 我不想使用Java Springs - 依賴注入!
招呼,米拉
你提供的代碼有點混亂。
控制單例類實例化的重點意味着您必須隱藏構造函數,因此客戶端無法訪問它並隨意創建新實例。
您的工廠方法(創建類實例的方法) getInstance()
是一個實例方法。 您必須創建一個新的BusinessService
實例才能創建BusinessService
實例 - 很明顯,它將無法正常工作。
您有幾種選擇來處理您的情況:
從接口中刪除getInstance()
方法,並將其作為靜態方法在實現類中公開。 您還應該將構造函數的可見性限制為private
。
public class BusinessServiceImpl implements BusinessService { public static BusinessServiceImpl getInstance() { // instantiation logic } private BusinessServiceImpl() { // constructor logic } }
使用工廠類實例化服務並控制實例數。 這包括一起刪除getInstance()
方法並將BusinessServiceImpl
類的可見性限制為package
。
class BusinessServiceImpl implements BusinessService { BusinessServiceImpl() { // constructor logic } } // should be in the same package as BusinessServiceImpl public final class BusinessServiceFactory { private BusinessServiceImpl instance; public BusinessService getInstance() { // instance creation logic, same as singleton creation logic } }
使用枚舉來處理單例邏輯。 從界面中刪除getInstance()
方法。
public enum BusinessServiceImpl implements BusinessService { INSTANCE; // implement the methods from your interface }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.