所以我有一個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應該放在哪一層?查看,控制器等 – Woot4Moo 2012-03-13 14:17:47
是的,這是一個基本的工廠模式,(重命名PageItem IPageItem會使它在大多數其他開發人員的眼睛更清晰)。爲了獲得下一個抽象層次,你應該看看一個IOC(反轉控制)模式實現,例如依賴注入。 – 2012-03-13 14:20:57
在我看來,工廠在這裏沒有必要,因爲對象的構造相當簡單。 – 2012-03-13 14:17:02