|
锁定老贴子 主题:java设计模式全解[4]-工厂方法模式
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2007-06-13 关键字: java设计模式,工厂模式,Factory模式
工厂方法模式 概述 生活中的例子 工厂方法解说 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2007-06-13
|
|
| 返回顶楼 | |
|
时间:2007-06-13
好像还没写完?
|
|
| 返回顶楼 | |
|
时间:2007-07-08
工厂方法一般的出现形态是这样的:
public voic xx(){ ... createProduct();//调用工厂方法 ... } abstract protected Product createProduct(); 工厂方通常不会被client调用,而是由xx()方法自己消化,我把他叫"自产自消",这一点是跟其他创建模式最大的区别.所以一般工厂方法都是定义为protected. 下面这些代码是来自一个通用树构造组件里的,可以参考下. http://www.javaeye.com/topic/98668
public TreeModel create(Collection pUserDatas, UserDataUncoder pUncoder)
throws CreateTreeModelException {
if (pUserDatas == null) {
return new DefaultTreeModel();
}
if ( pUserDatas.isEmpty() ){
return new DefaultTreeModel();
}
if (pUncoder == null) {
throw new CreateTreeModelException("节点解码器不能为空null");
}
DefaultTreeModel result = new DefaultTreeModel();
Map nodes = new HashMap();
Iterator userDatasIterator = pUserDatas.iterator();
while (userDatasIterator.hasNext()) {
Object userData = userDatasIterator.next();
Object id = null;
try {
id = pUncoder.getID(userData);
} catch (UncodeException ex) {
throw new CreateTreeModelException(ex.getMessage(), ex);
}
if ( id == null ){
throw new CreateTreeModelException("获取用户ID失败,用户对象:" + userData);
}
Node node = null;
try {
node = createNode(userData, pUncoder);
} catch (Exception ex) {
throw new CreateTreeModelException(ex.getMessage(), ex);
}
if ( node == null ){
log.warn("创建节点失败,用户对象:" + userData);
continue;
}
node.setUserData(userData);
nodes.put(id, node);//将节点cache起来
}
Iterator nodeIterator = nodes.values().iterator();
while (nodeIterator.hasNext()) {
Node node = (Node) nodeIterator.next();
Object userData = node.getUserData();
Object parentId = null;
try {
parentId = pUncoder.getParentID(userData);
} catch (UncodeException ex) {
throw new CreateTreeModelException(ex.getMessage(), ex);
}
Node parentNode = (Node) nodes.get(parentId);
if (parentNode == null) {//跟节点
result.addRootNode(node);
continue;
}
node.setParent(parentNode);
}
if (result.getRootNodeCount() == 0) {
throw new CreateTreeModelException("不存在跟节点");
}
if ( allowMutiRoot == false ){
if ( result.getRootNodeCount() > 1 ){
throw new MultiRootNodeException();
}
}
return result;
}
protected abstract Node createNode(Object pUserData, UserDataUncoder pUncoder);
|
|
| 返回顶楼 | |
|
时间:2007-08-15
呵呵 javastudy 麻烦你了 ...在帮我补全啊 ..最近很忙一直都没空上 ..最近 中招了 签了一个有点黑的公司 呵呵 估计最近会有点空 想抽空把这些写完 ...好像2个月没来了
|
|
| 返回顶楼 | |
|
时间:2007-09-04
不知道楼主可不可以深入分析下PROTOTYPE模式,我对这个不是很了解,谢谢。
|
|
| 返回顶楼 | |
浏览 5209 次








