本次体系:
1.XML建模
1:
我们为什么要学习XML的建模,他可以给我们带来什么好处,我们可以得到什么东西?
我们学习这个XML建模的好处就是,我们也可以在学习XML后更好的掌握java的集合框架现在我们要学习的是XML中的ConfigModel .ActionModel . ForwardModel . ConfigModelDactory
1.往config标签中添加了一个action标签
2.住action标签中添加了4个forward标签
3.将action标签的属性值path.type发生了更改
4.将forward标签的属性值name. type . redirect 发生了更改
2:
以面向对象的思想思考上述操作:
1.confingModel对象中加一个actionModel对象,因为actionModel在configModel中是唯一的,所以在configModel必然有一个属性(容器Map),能够以一对一的方式存储不同个actionModel,还有添加的方法还有查询的方法
2.actinModel 也有一个(容器Map),也有个添加的方法查询的方法
3.actinModel 还有属性path . type
4.forwardModel 有属性name . path .redirect
1.1ConfigModel
package com.zkanghao; import java.util.HashMap; import java.util.Map; public class ConfigModel { private Map<String , ActionModel> aMap=new HashMap<String, ActionModel>(); public void push(ActionModel actionModel) { aMap.put(actionModel.getPath(), actionModel); } public ActionModel pop(String path) { return aMap.get(path); } public static void main(String[] args) { ConfigModel configModel=new ConfigModel(); ActionModel actionModel = configModel.pop("/loginAction"); ForwardModel forwardModel = actionModel.pop("success"); System.out.println(forwardModel.getPath()); } }
1.2ActionModel
package com.zkanghao; import java.util.HashMap; import java.util.Map; public class ActionModel { private String path; private String type; private Map<String, ForwardModel> fMap = new HashMap<String, ForwardModel>(); public String getPath() { return path; } public void setPath(String path) { this.path = path; } public String getType() { return type; } public void setType(String type) { this.type = type; } //将forward往action中放 压栈 public void push(ForwardModel forwardModel) { fMap.put(forwardModel.getName(), forwardModel); } //从action中通过name值取出forward public ForwardModel pop(String naem) { return fMap.get(naem); } }
1.3ForwardModel
package com.zkanghao; import java.util.HashMap; import java.util.Map; public class ActionModel { private String path; private String type; private Map<String, ForwardModel> fMap = new HashMap<String, ForwardModel>(); public String getPath() { return path; } public void setPath(String path) { this.path = path; } public String getType() { return type; } public void setType(String type) { this.type = type; } //将forward往action中放 压栈 public void push(ForwardModel forwardModel) { fMap.put(forwardModel.getName(), forwardModel); } //从action中通过name值取出forward public ForwardModel pop(String naem) { return fMap.get(naem); } }
2.工厂模式
什么是工厂模式,工厂模式是23种模式之一
2.1工厂模式的定义:
定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。这满足创建型模式中所要求的“创建与使用相分离”的特点。
按实际业务场景划分,工厂模式有 3 种不同的实现方式,分别是简单工厂模式、工厂方法模式和抽象工厂模式。
23种设计模式---->工厂模式--->创建型模式
sessionFactory. sqlsessionFactory . securityFactory等等。。。。
2.1ConfigModeIFactory
package com.zkanghao; import java.io.InputStream; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class ConfigModelFactory { public static ConfigModel build(String xmlPath) throws Exception { ConfigModel configmodel = new ConfigModel(); //读取文件内容 InputStream in = ConfigModelFactory.class.getResourceAsStream(xmlPath); SAXReader sr = new SAXReader(); Document read = sr.read(in); // System.out.println(read.asXML()); //让actionmodel有值,再放入到configmodel中 List<Element> actionEles = read.selectNodes("/config/action"); for (Element actionEle : actionEles) { ActionModel actionmodel = new ActionModel(); actionmodel.setPath(actionEle.attributeValue("path")); actionmodel.setType(actionEle.attributeValue("type")); //让forwardmodel有值,再放入到actionmodel中 List<Element> forwardEles = actionEle.selectNodes("forward"); for (Element forwardEle : forwardEles) { // System.out.println(forwardEle.asXML()); ForwardModel forwardmodel = new ForwardModel(); forwardmodel.setName(forwardEle.attributeValue("name")); forwardmodel.setPath(forwardEle.attributeValue("path")); //当redirect值为false时,是转发,其它则是重定向 forwardmodel.setRedirect(!"false".equals(forwardEle.attributeValue("redirect"))); actionmodel.push(forwardmodel); } configmodel.push(actionmodel); } return configmodel; } public static ConfigModel build() throws Exception { ConfigModel configmodel = new ConfigModel(); //读取文件内容 InputStream in = ConfigModelFactory.class.getResourceAsStream("/config.xml"); SAXReader sr = new SAXReader(); Document read = sr.read(in); // System.out.println(read.asXML()); //让actionmodel有值,再放入到configmodel中 List<Element> actionEles = read.selectNodes("/config/action"); for (Element actionEle : actionEles) { ActionModel actionmodel = new ActionModel(); actionmodel.setPath(actionEle.attributeValue("path")); actionmodel.setType(actionEle.attributeValue("type")); //让forwardmodel有值,再放入到actionmodel中 List<Element> forwardEles = actionEle.selectNodes("forward"); for (Element forwardEle : forwardEles) { // System.out.println(forwardEle.asXML()); ForwardModel forwardmodel = new ForwardModel(); forwardmodel.setName(forwardEle.attributeValue("name")); forwardmodel.setPath(forwardEle.attributeValue("path")); //当redirect值为false时,是转发,其它则是重定向 forwardmodel.setRedirect(!"false".equals(forwardEle.attributeValue("redirect"))); actionmodel.push(forwardmodel); } configmodel.push(actionmodel); } return configmodel; } public static void main(String[] args) throws Exception { // 测试,拿第二个action中第二个forward的path值 ConfigModel configmodel = ConfigModelFactory.build("/config.xml"); ActionModel actionmodel = configmodel.pop("/loginAction"); ForwardModel forwardmodel = actionmodel.pop("success"); System.out.println("第二个action中第二个forward的path值为"+forwardmodel.getPath()); } }