如果我正确理解了您的问题,您会想要一个系统,其中使用您的库的人可以通过某种方式用他们自己的实现覆盖默认算法。这可能看起来像这样:
public class Renderer{
// Declare an interface which specifies a single method that handles rendering
public interface RenderHandler{ void render(float f, float f1); }
// Declare a default implementation that is created with each instance of the Renderer
protected RenderHandler handler = (f, f1) -> { System.out.println("Replace me!"); };
// Define a system of replacement for the rendering routine
public void replaceHandler(RenderHandler replacement){
if(replacement!=null) handler = replacement; // Determine a viable replacement
}
// This shows that the same method can be called but yield different results
// based on how the RenderHandler object in the "handler" field is implemented
public void handleRender(float f, float f1){ handler.render(f, f1); }
}
现在,此示例将允许您的库的用户使用自定义实现调用 replaceHandler(),以替换 Renderer 对象附带的默认实现。例如:
public static void main(String[] args){
Renderer r = new Renderer(); // Create Renderer object
r.handleRender(1f, 2f); // Prints "Replace me!"
r.replaceHandler((f, f1)->{ System.out.println(f*f1); }); // Lambda implementation
r.handleRender(1f, 2f); // Prints "2"
}
如您所见,替换的实际实现由使用您的库的人处理(默认实现除外)。因此,您不必担心 如何 它是如何实现的,只需要在请求替换的情况下,它实际上是 实现的。这意味着,如果您想支持自定义渲染例程的选项,您可以通过使用适当的方法定义一个接口并简单地实现一个默认方法并允许使用方法进行替换(如第一个代码示例中所示) .