锁定老帖子 主题:java设计模式全解[4]-工厂方法模式
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-06-13
工厂方法模式 概述 生活中的例子 工厂方法解说 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-06-13
|
|
返回顶楼 | |
发表时间:2007-06-13
好像还没写完?
|
|
返回顶楼 | |
发表时间:2007-07-08
工厂方法一般的出现形态是这样的:
public voic xx(){ ... createProduct();//调用工厂方法 ... } abstract protected Product createProduct(); 工厂方通常不会被client调用,而是由xx()方法自己消化,我把他叫"自产自消",这一点是跟其他创建模式最大的区别.所以一般工厂方法都是定义为protected. 下面这些代码是来自一个通用树构造组件里的,可以参考下. http://www.iteye.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模式,我对这个不是很了解,谢谢。
|
|
返回顶楼 | |
浏览 7815 次