在Java API的设计,我想出了下面的模式来满足这里列出这里有什么设计模式吗?这个java代码有没有可能的缺陷?
- 实际的公共API类应实现为final类有一定的要求,以防止继承和可能滥用
- 实际的公共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;
}
}
Althoug它工作正常,并且具有适当的访问级别,但是我只具有设计模式或API设计的初级水平技能,所以我很难用它来发现可能的故障。那么这有什么问题吗?或者它是否已经实行了一些模式?
http://codereview.stackexchange.com –
谢谢@sᴜʀᴇsʜᴀᴛᴛᴀ,不知道“代码审查”。那么我应该删除并重新发布在CR还是什么? – cpz
IMO不应该删除这个问题。除了基本的非灵活工厂方法模式外,您的设计非常奇怪。为什么要把'AbstractProduct impl'标记为'final'?看起来你想实现[装饰](http://en.wikipedia.org/wiki/Decorator_pattern)。 –