私はおそらく他の場所で再利用したいPageItemオブジェクトを持っています。 私はABCのフレームワークです。ここでここでファクトリーパターンを使用していますか?
はPageItemインタフェースです:
public interface PageItem {
public abstract String getUrl();
public abstract boolean getIsCurrent();
public abstract PageItem getParent();
public abstract List<PageItem> getPChildren();
public abstract void setParent(PageItem pageItem);
public abstract void addChild(PageItem pageItems);
public abstract boolean getHasSelectedChild();
}
は、ここに実装だ:
public class PageItemImpl implements PageItem {
private String title = "";
private String url = "";
private boolean isCurrent = false;
private List<PageItem> children = new ArrayList<PageItem>();
private PageItem parent = null;
public String getUrl() {
return url;
}
public boolean getIsCurrent() {
return isCurrent;
}
public List<PageItem> getChildren() {
return children;
}
public PageItem getParent() {
return parent;
}
public void setUrl(String url) {
this.url = url;
}
public void setIsCurrent(boolean isCurrent) {
this.isCurrent = isCurrent;
}
public void setParent(PageItem parent) {
this.parent = parent;
}
public void addChild(PageItem pageItem) {
this.children.add(pageItem);
}
public boolean getHasSelectedChild() {
return false;
}
}
は、ここに工場です:
public class PageItemFactory {
public static PageItem getPageItem(ABCPage page, ABCRequestParams params) throws ABCException {
PageItemImpl pageItem = new PageItemABCImpl();
pageItem.setTitle(page.getTitle());
pageItem.setUrl(page.getUrl());
pageItem.setIsCurrent(params.getUrl().equals(page.getUrl());
return pageItem;
}
}
は私か、それは意味がないということですか?
PageItemFactoryは、ABCフレームワークへの参照があるため、他の場所では再利用できません。
PageItemをオーバーライドするクラスを作成し、ABC固有のパラメータにコンストラクタを使用するだけでよいですか?
ABCFrameworkはどの層に入っていますか? View、Controllerなど – Woot4Moo
これは基本的なFactoryパターンです(PageItem IPageItemの名前を変更すると、他のほとんどの開発者の目では少し明確になります)。次のレベルの抽象化を得るためには、Dependency InjectionなどのIOC(Inversion of Control)パターン実装を見てください。 –
私の意見では、オブジェクトの構築はかなり簡単なので、ここでは工場は必要ありません。 –