2017-02-04 20 views
0

У меня есть класс для ShopOrderRepository и код следующий,Как создать класс Singleton из другого класса?

public class ShopOrderRepository { 

    private IModelFactory modelFactory; 

    public ShopOrderRepository(IModelFactory modelFactory) 
    { 
     this.modelFactory = modelFactory; 
    } 

    public ShopOrder loadShopOrder(String shopOrderId) 
    { 
     ShopOrder order = modelFactory.getShopOrder(); 
     order.setId(shopOrderId); 
     List<OrderLine> orderLines = new ArrayList<OrderLine>(); 
     orderLines.add(getOrderLine("1","Keyboard",1)); 
     order.setOrderLines(orderLines); 
     return order; 
    } 

    private OrderLine getOrderLine(String productId, String name, int quantity) 
    { 
     OrderLine orderLine = modelFactory.getOrderLine(); 
     Product product = modelFactory.getProduct(); 
     product.setId(productId); 
     product.setName(name); 
     orderLine.setProduct(product); 
     orderLine.setQuantity(quantity); 
     return orderLine; 
    } 

    public void saveShopOrder(ShopOrder shopOrder) 
    { 
     System.out.println("Hurray, you saved the shopOrder: "+shopOrder); 
    } 

} 

Теперь у меня есть еще один класс, а именно BackendContainer реализует интерфейс и приводится ниже,

public class BackendContainer implements IModelFactory { 

    public BackendController getBackendController() 
    { 
     return new BackendController(getShopOrderRepository()); 
    } 

    // TODO: should be a singleton 
    public ShopOrderRepository getShopOrderRepository() 
    { 
     return new ShopOrderRepository(this); 
    } 
} 

Теперь есть комментарий топ метода getShopOrderRepository и его указания сделать класс ShopOrderRepository в качестве Singleton. Итак, я пишу, как следующее,

public class BackendContainer implements IModelFactory { 

    private ShopOrderRepository shopOrderRepository; 

     public BackendController getBackendController() 
     { 
      return new BackendController(getShopOrderRepository()); 
     } 

     // TODO: should be a singleton 
     public static ShopOrderRepository getShopOrderRepository() 
     { 
      // return new ShopOrderRepository(this); 
      return shopOrderRepository != null ? shopOrderRepository: (shopOrderRepository = new ShopOrderRepository(this)); 
     } 
    } 
+1

И вопрос? Как я могу вам помочь? –

+0

Я попросил, чтобы комментарий был предназначен для использования синглтона класса ShopOrderRepository. То, как я это сделал, это правильно? – Arefe

ответ

-1

Здесь будет мой ответ,

public class BackendContainer implements IModelFactory { 

    private ShopOrderRepository shopOrderRepository; 

    public BackendController getBackendController() 
    { 
     return new BackendController(null); 
    } 

    /** 
    * Instantiates a singleton ShopOrderRepository instance per BackendContainer instance 
    * @return ShopOrderRepository 
    */ 
    public ShopOrderRepository getShopOrderRepository() { 

     if(shopOrderRepository == null) { 
      synchronized(ShopOrderRepository.class) { 
       if (shopOrderRepository == null) { 
        shopOrderRepository = new ShopOrderRepository(this); 
       } 
      } 
     } 

     return shopOrderRepository; 
    } 
} 
+0

Возможно, вы правильно это написали? – Arefe