最近在看JBPM4.4的源码,一直有一种想法,把Tomcat,Spring,Structs,Ext,Hibernate的源码中的23种设计模式进行整理出来,便于部门内学习。把设计的理论结合到源码中进行。
今天先看一下模板模式
/*
* JBoss, Home of Professional Open Source
* Copyright 2005, JBoss Inc., and individual contributors as indicated
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jbpm.jpdl.internal.activity;
import org.w3c.dom.Element;
import org.jbpm.jpdl.internal.xml.JpdlParser;
import org.jbpm.pvm.internal.model.ActivityImpl;
import org.jbpm.pvm.internal.util.TagBinding;
import org.jbpm.pvm.internal.util.XmlUtil;
import org.jbpm.pvm.internal.xml.Parse;
import org.jbpm.pvm.internal.xml.Parser;
/**
* @author Tom Baeyens
*/
public abstract class JpdlBinding extends TagBinding {
public JpdlBinding(String tagName) {
super(tagName, null, null);
}
public abstract Object parseJpdl(Element element, Parse parse, JpdlParser parser);
public final Object parse(Element element, Parse parse, Parser parser) {
return parseJpdl(element, parse, (JpdlParser) parser);
}
public void parseName(Element element, ActivityImpl activity, Parse parse) {
String name = XmlUtil.attribute(element, "name", isNameRequired() ? parse : null);
if (name!=null) {
// basic name validation
if (name.length()==0) {
parse.addProblem(XmlUtil.errorMessageAttribute(element, "name", name, "is empty"), element);
}
activity.setName(name);
}
}
public boolean isNameRequired() {
return true;
}
}
父类中这个方法 public abstract Object parseJpdl(Element element, Parse parse, JpdlParser parser);
在子类中实现,但在父类中已经进行使用。
/*
* JBoss, Home of Professional Open Source
* Copyright 2005, JBoss Inc., and individual contributors as indicated
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jbpm.jpdl.internal.activity;
import org.jbpm.jpdl.internal.xml.JpdlParser;
import org.jbpm.pvm.internal.model.ScopeElementImpl;
import org.jbpm.pvm.internal.task.TaskDefinitionImpl;
import org.jbpm.pvm.internal.xml.Parse;
import org.w3c.dom.Element;
/**
* @author Tom Baeyens
*/
public class TaskBinding extends JpdlBinding {
private static final String TAG = "task";
public TaskBinding() {
super(TAG);
}
public Object parseJpdl(Element element, Parse parse, JpdlParser parser) {
TaskActivity taskActivity = new TaskActivity();
ScopeElementImpl scopeElement = parse.contextStackFind(ScopeElementImpl.class);
TaskDefinitionImpl taskDefinition = parser.parseTaskDefinition(element, parse, scopeElement);
taskActivity.setTaskDefinition(taskDefinition);
return taskActivity;
}
}
分享到:
相关推荐
C#设计模式与源码
包含了23种常见的设计模式源码,比较适合新手学习参考
C++设计模式源码C++设计模式源码C++设计模式源码C++设计模式源码。绝对好
23种设计模式源码分析
本书用实际生活中的例子带你了解常用的设计模式,介绍了诸多有关编写Python风格代码的底层细节和概念,包括故障排除、实践、系统架构和设计原则等,帮你解决每天都会遇到的问题。 探索用工厂方法和抽象工厂来创建...
设计模式 带源码设计模式 带源码设计模式 带源码设计模式 带源码设计模式 带源码设计模式 带源码设计模式 带源码
《Android 源码设计模式解析与实战》不仅分析了Android源代码的设计模式,更结合实例演示了如何使用这些设计模式。看这本书,既能学到如何分析、学习Android源代码,又能提高自己架构设计水平 《Android 源码设计...
书与源码都在里面,好东西大家一起学,pdf格式的书。此乃高手必备良书呀。
设计模式精解-GoF 23 种设计模式解析附 C++实现源码 http://www.mscenter.edu.cn/blog/k_eckel 式种的某一个正好可以很好的解决问题,到自己设计的elegant的系统时候的喜悦与思考;一直到最后向别人去讲解设计模式...
java设计模式刘伟编著源码,7个面向对象设计原则,24个常用设计模式
研磨设计模式的配套源码,请下载,不要想了,解压后,直接放到eclipse下面即可运行!
李建忠 c++设计模式 视频源码课件全集百度云下载链接。 链接包括视频、源码、课件可下载,学习起来方便高效。 共3.83GB
《时间触发嵌入式系统设计模式》 源码,不含PDF文档。
深入浅出设计模式附书源码Java版源代码
提供了C#设计模式的源码,让你在很短的时间内学会设计模式的精髓!
Android源码设计模式解析与实战 Android源码设计模式解析与实战 Android源码设计模式解析与实战 Android源码设计模式解析与实战 Android源码设计模式解析与实战 Android源码设计模式解析与实战 Android源码设计模式...
23种设计模式源码,对学习设计模式很有帮助,值得拥有
自己学习整理的设计模式源码,一共22个有源码 其中一个解释器模式不常用,暂时没必要看,都是自己手动编写和调试通过的,供想要学习设计模式的同学下载学习,每个模式均有先关说明和注释
ActionScript3 设计模式+ 源码,非常全,初学者非常好用!
java 设计模式的类图 与源码分析 设计模式的类图 与源码分析 设计模式的类图 与源码分析