2012-10-09 39 views
0

什麼是Java代碼的用途:org.apache.commons.collections15.Factory如何從apache.commons使用工廠?

  1. 是否有相關文件證明(我無法找到任何有用的)
  2. 如何使用這個實例類型的對象:在構造函數中Factory<Integer>Factory<String> Java Jung圖形包中的BarabasiAlbertGenerator
  3. 我怎樣才能得到一個功能正常的BarabasiAlbertGenerator。

這是我有的代碼,它只輸出一個頂點。

Factory<Graph<String, Integer>> graphFactory = SparseGraph.getFactory(); 
    Integer[] ints = {1}; 
    String[] strs = {"12"}; 
    Class[] typesStr = {String.class}; 
    Class[] typesInt = {int.class}; 

    Factory<String> vertexFactory = InstantiateFactory.getInstance(String.class, typesStr, strs); 
    Factory<Integer> edgeFactory = InstantiateFactory.getInstance(Integer.class, typesInt, ints); 
    HashSet<String> seedVertices = new HashSet(); 
    for(int i = 0; i < 10; i++) 
    { 
     seedVertices.add("v"+i); 
    } 

    BarabasiAlbertGenerator<String, Integer> barabasiGen = new 
      BarabasiAlbertGenerator<String,Integer>(graphFactory, vertexFactory, 
                edgeFactory, seedVertices.size(), 1, seedVertices); 

    Graph g = barabasiGen.create(); 

我覺得我的問題與我的vertexFactory和edgeFactory有關。對我來說,似乎我的vertexFactory只能創建值爲12的頂點,而我的edgeFactory只能創建值爲1的邊。因此,該圖只有1個頂點,值爲12.此推理是否準確?

回答

2

您正在這麼多,很多過於複雜。

工廠只是生成對象的類的接口。這是微不足道的實施。

您不需要InstantiationFactory。只需寫你自己的。例如:

 Factory<Integer> vertexFactory = 
      new Factory<Integer>() { 
       int count; 
       public Integer create() { 
        return count++; 
      }}; 

連續調用vertexFactory.create()產生一系列Integer對象遞增的順序,從0開始

工廠的具體性質要取決於什麼屬性(如果有的話)你想要頂點對象,但你可能並不在意。如果你這樣做,並且你有(比如說)一個List你想用於頂點的對象,那麼你的Factory實例可以使用該列表。

生成特定圖形或使用圖形生成器(而不是靜態保存的圖形)的任何JUNG示例將使用Factory實例。他們無處不在。

1

從它的外觀(即the Javadoc)它是定義用於創建新實例的create方法的接口:

java.lang.Object create()

創建新的對象。

返回: 一個新的對象


如何使用這個實例類型的對象:Factory<Integer>Factory<String>

實際上,你可以使用Factory<Integer>實例化一個Integer(而不是另一個Factory)。

例如

Factory<Integer> factory = ConstantFactory.getInstance(123); 
Integer oneTwoThree = factory.create(); // will give you the Integer "123" 
+0

更多根據[*使用*](http://commons.apache.org/collections/apidocs/org/apache/commons/collections/class-use/Factory.html)。 – trashgod

+0

爲什麼你會想要使用ConstantFactory? – CodeKingPlusPlus