我的MVC框架————GothaMVC(3)view层的实现
来源:互联网 发布:centos 桥接模式 设置 编辑:程序博客网 时间:2024/06/02 00:56
众所周知现在的前端模板有很多,像JSP,FreeMarker,Velocity等。
面向对象的程序设计要遵守六大设计原则之一的开闭原则,即对扩展开放——对修改关闭。
所以view层的代码,在我这里的核心在于策略模式的实现。
首先,我们写一个view层的接口
package viewTemplate;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import modelWrapper.Model;public interface IView { void viewRender(Model m,HttpServletRequest req,HttpServletResponse resp);}
然后,依照策略模式,我们需要定义一个“锦囊”来放置各种策略。
package viewTemplate;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import modelWrapper.Model;public class ViewContext { //这里用来放置需要的view private IView view; //属性注入 public ViewContext(IView view){ this.view=view; } public void render(Model m,HttpServletRequest req,HttpServletResponse resp){ view.viewRender(m,req, resp); }}
接下来,我们书写JSP的view形式的代码
package viewTemplate;import java.io.IOException;import java.util.Set;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import modelWrapper.Model;public class Jsp implements IView { @Override public void viewRender(Model model,HttpServletRequest req, HttpServletResponse resp) { if(model!=null){ Set<String> keys=model.getModel().keySet(); for(String key:keys){ req.setAttribute(key, model.getModel().get(key)); } } try { req.getRequestDispatcher(model.getView()).forward(req, resp); } catch (ServletException | IOException e) { e.printStackTrace(); } }}
然后,是FreeMarker和velocity的代码。我懒得去写了,你们自己填空吧,当然也可以自己去扩展IView接口去实现其他你们喜欢的模板,哈哈。
package viewTemplate;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import modelWrapper.Model;public class FreeMarker implements IView { @Override public void viewRender(Model m,HttpServletRequest req, HttpServletResponse resp) { }}
package viewTemplate;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import modelWrapper.Model;public class Velocity implements IView { @Override public void viewRender(Model m,HttpServletRequest req, HttpServletResponse resp) { }}
最后还没完,我们需要建立一个工厂来维护这些类
package viewTemplate;public class ViewFactory {//工厂模式 public static ViewContext getView(IView view){ return new ViewContext(view); } public static Jsp getJsp(){ return new Jsp(); } public static FreeMarker getFreeMarker(){ return new FreeMarker(); } public static Velocity getVelocity(){ return new Velocity(); }}
1 0
- 我的MVC框架————GothaMVC(3)view层的实现
- 我的MVC框架————GothaMVC(4)GothamDispatcher的实现和Model层的封装
- 我的MVC框架————GothaMVC(2)拦截器的实现
- 我的MVC框架————GothaMVC(1)web容器和handler包装类
- 谈谈我对MVC的View层实现的理解
- Spring框架的MVC实现——Spring MVC
- 从零开始搭建一个完善的MVP开发框架(四) —对View(Activity,Fragment等)层组件进行封装简化View层的开发
- 用PHP开始你的MVC (四)实现View层
- 用PHP开始你的MVC (四)实现View层
- 用PHP开始你的MVC (四)实现View层
- 用PHP开始你的MVC (四)实现View层
- 用PHP开始你的MVC (四)实现View层
- 用PHP开始你的MVC (四)实现View层
- 【MVC框架】——View和Controller之间的传值
- SSH框架——(二)四层结构:DAO,Service,Controller,View层
- 我的持久层——MyPersistance
- MVC框架显示层——Velocity技术
- MVC框架显示层——Velocity技术
- markdown 简明语法
- Android中的Adapter 详解(三)
- 《Linux系统基础优化16条知识汇总》
- leetcode 24. Swap Nodes in Pairs
- 如何在Unity3D实现Admob
- 我的MVC框架————GothaMVC(3)view层的实现
- table细边框
- IOS银联支付
- 约瑟夫环问题
- 关于找不到印社属性的问题的解决
- Parcel: unable to marshal value或Parcel: unable to marshal value null 问题
- 与平安对接保险随笔
- 【备查】View, widget ,ViewGroup, LinearLayout等layout 结构图
- 模糊神经网络PID控制的一个例子