为了在 Java 中设计 API,我提出了以下模式来满足此处列出的某些要求
- 实际的公共 API 类应作为最终类实现,以防止继承和可能的误用
- 实际的公共 API 类不应公开任何超出所需方法的内容。
- 将 API 类和内部实现分离到不同的包中
- 公共类和内部类的可扩展性或演变范围
示例代码如下:
package external;
import internal.AbstractProduct;
public final class Product extends AbstractProduct{
    protected Product(int a, int b){
        super(a,b);
    }
    @Override
    public int result(){
        return super.result();
    }
}
public class ProductFactory {
    public static Product createProudct(int a, int b){
        return new Product(a, b);
    }
}
和内部类如下:
package internal;
public abstract class AbstractProduct {
    private final AbstractProduct impl;
    protected AbstractProduct(int a, int b){
        impl = new ProductImpl(a, b);
    }
    protected AbstractProduct(){
        impl = null;
    }
    protected int result(){
        return impl.result();
    }
}
class ProductImpl extends AbstractProduct{
    private int a;
    private int b;
    ProductImpl(int a, int b){
        this.a = a;
        this.b = b;
    }
    @Override
    protected int result(){
        return a*b;
    }
}
虽然它工作正常并且也有适当的访问级别,但我只有设计模式或 API 设计的初学者水平技能,所以我似乎很难发现可能的故障。那么这有什么问题吗?或者它是一些已经实践过的模式?