2017-02-04 4 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としてシングルトンにするように指示します。だから、私はここで、以下のよう

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

関連する問題