我的MVC架構————GothaMVC(3)view層的實現

來源:互聯網
上載者:User

眾所周知現在的前端模板有很多,像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();    }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.