为了在 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 设计的初学者水平技能,所以我似乎很难发现可能的故障。那么这有什么问题吗?或者它是一些已经实践过的模式?