在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)。 –