如何使用apache.commons的工厂?

时间:2012-10-09 01:27:56

标签: java factory apache-commons factory-pattern jung

java代码有哪些用途:org.apache.commons.collections15.Factory

  1. 是否有文件(我找不到任何有用的东西)
  2. 如何在Java Jung图包中的BarabasiAlbertGenerator的构造函数中使用它来实例化类型为Factory<Integer>Factory<String>的对象?
  3. 如何才能获得功能正常的BarabasiAlbertGenerator。
  4. 这是我的代码,它只输出一个顶点。

        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 个答案:

答案 0 :(得分:2)

你做得太多了,太复杂了。

Factory只是生成对象的类的接口。实施起来很简单。

您不需要InstantiationFactory。写自己的。例如:

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

vertexFactory.create()的连续调用按递增顺序生成一系列Integer个对象,从0开始。

您想要的Factory的特定性质取决于您希望顶点对象具有哪些属性(如果有),但您可能实际上并不关心。如果你这样做,并且你有(例如)要用于顶点的List个对象,那么你的Factory实例可以使用该列表。

任何生成临时图形或使用图形生成器(而不是静态保存图形)的JUNG示例都将使用Factory个实例。他们到处都是。

答案 1 :(得分:1)

从它的外观(即the Javadoc)开始,它是一个界面,用于定义创建新实例的create方法:

  

java.lang.Object create()

     

创建一个新对象。

     

返回:           一个新的对象


  

如何使用它来实例化类型为Factory<Integer>Factory<String>的对象?

实际上,你使用Factory<Integer>来实例化一个整数(而不是另一个工厂)。

例如

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