1.20(设计模式)模板模式

模板模式,定义了一个模板,模板内容经过子类实现模板的抽象方法去添加。html

 

就相似学校须要建一个新校区,新校区有多栋宿舍,找了多个施工方,每一个施工方负责一栋宿舍楼。app

各个施工方都有本身的想法,建造的宿舍楼各不相同,固然从使用上来讲是能够的(毕竟能够用就行),只是后期装修维护不方便。框架

如今为了后期便于管理维护,学习先找设计院设计图纸,全部的施工方都按照图纸上面的来建造,图纸大致的框架是相同的,ide

但楼栋的某些具体细节各不相同,各个施工方根据自身状况调节。学习

能够看作是施工方根据图纸模板建造,但某些具体细节仍然由施工方来肯定。测试

 

这样在定义和实现之间添加一个模板,使实现不那么为所欲为,而是在固定框架中去完善。ui

 

 

例如html文档,文档头部和尾部的格式基本是固定的,只是body部分的内容不一样。spa

咱们就能够构建一个包含html文档头部和尾部的模板,body部分根据具体需求填充内容便可。设计

 

首先咱们是要绘制html页面,因此先定义一个接口,里面有一个构建页面的方法。code

public interface PageUtil {
    public String buildPage();
}

 

 

html模板类,这就是在定义和实现之间的模板,加了这一层后使实现更规范,这就至关于施工图纸。

子类始终是按照该类的HTML模板去构建页面,只是body部分的内容不一样,

body部分经过实现了 abstract void appendBody方法的子类重写该方法肯定body部份内容。

public abstract class AbstractPageUtil implements PageUtil{
    private StringBuffer stringBuffer = new StringBuffer();
    
    @Override//固定格式的模板,子类始终是按照这个模板来构建HTML页面的 public String buildPage() {
        stringBuffer.append("<!Doctype html>\r\n<html>\r\n" +
                "<head>\r\n" + 
                "<meta charset=\"UTF-8\">\r\n" + 
                "<title>Insert title here</title>\r\n" + 
                "</head>\r\n" + 
                "<body>");//html头部
        appendBody(stringBuffer);//子类实现该方法,填充具体内容
        stringBuffer.append("</body>\r\n</html>");//html尾部 return stringBuffer.toString();
    }
    
    //子类填充body, abstract void appendBody(StringBuffer stringBuffer) ;
}

子类继承模板类,实现appendBody方法便可,模板类的子类都是按照这个模式生成html文档。

只是body的内容根据实际需求有所不一样,

 

 

接下来就是继承AbstractPageUtil 的子类,实现父类的appendBody方法,填充不一样的内容。

public class HtmlPageUtil extends AbstractPageUtil{
    
    
    @Override
    void appendBody(StringBuffer stringBuffer) {//实现父类的方法,设置body部份内容,模板依然是父类的模板
        stringBuffer.append("hello world!");
    }
    
    public static void main(String[] args) {//测试
        HtmlPageUtil htmlPageUtil = new HtmlPageUtil();
        System.out.println(htmlPageUtil.buildPage());
    }
    
}
运行结果:
<!Doctype html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body>hello world!</body> </html>

 

 

参考资料:

https://www.cnblogs.com/zuoxiaolong/p/pattern10.html

https://www.runoob.com/design-pattern/template-pattern.html

相关文章
相关标签/搜索