如何从库中调用主程序中的类?

时间:2013-04-04 06:43:17

标签: java android

我有多个需要编写的程序,它们共享共同的功能/资源。我希望看看我是否可以将这些程序的很大一部分放入库中。方案如下:

ProgA,ProgB和ProgC是使用libX的程序。

libX有一个类XYZ,它将实例化一个ABC类。

ProgA,ProgB和ProgC都有不同的ABC类实现。

如何构建我的程序来实现这一目标?我曾尝试做研究,但无法找到答案。提前谢谢......

3 个答案:

答案 0 :(得分:0)

您可以在库中声明一个公共接口ABCInterface,其中包含库的操作所需的所有方法。然后,您的不同程序将声明其类ABC实现此接口,并将引用传递给库的方法。

如果您需要在库中实例化类(一次或多次),您可以将引用传递给工厂而不是类实例本身。以下代码可能会让您了解如何实现此类功能。

// Library code
interface ABCInterface {
    public int getValue();
}

interface ABCFactory {
    public ABCInterface createInstance();
}

class Library {
    public static void doWork(ABCFactory factory) {
        ABCInterface obj = factory.createInstance();
        System.out.println(obj.getValue());
    }
}


// Program code
class Program {
    class ABCImplementation implements ABCInterface {
        @Override
        public int getValue() {
            return 42;
        }
    }

    public void useLibrary() {
        Library.doWork(new ABCFactory() {
            @Override
            public ABCInterface createInstance() {
                return new ABCImplementation();
            }
        });
    }
}

答案 1 :(得分:0)

似乎你需要创建n inversion of control
在这种情况下,你需要libX有一个指向接口ABC的指针,它具有你想要libX使用的所有功能,然后,progA,progB和progC必须实现这个接口。

当您启动程序时,您需要转到共享库并使用已知方法将正在运行的程序注入库中,例如:

setProgram(IMyInterface interface) { 
    this.interface = interface; 
}

这样,当您想要运行已知的响应操作时,就会运行this.interface.doSomething(),就是这样。

答案 2 :(得分:0)

您只需拥有一个基本库interface ABC,它提供的界面允许您的XYZ班级与班级AB和{{1}进行互动这些都实现了C

interface ABC

您的库类只需要对实现public interface ABC { public void method1(); public void method2(); } 的对象的引用。

interface ABC

然后,您的public class XYZ { private ABC abc; public XYZ(ABC abc) { this.abc = abc; } } AB实施要么实施C,要么创建即时实施ABC的对象。

对我而言,这听起来很像回调计划。 Yor库需要一种标准方法来将结果传达给特定的实现。 ABC基本上是一个事件处理程序接口。