2017-02-04 62 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