《Head First Design Patterns》读书笔记之模板模式

  因为最近在学Django,所以对于模板这个概念还是比较熟悉的.Django的MTV模式,模板(Template)是其特色之一,我们可以对比着看.

  以下是我的基础模板base.html文件

<span style="font-size:14px;"><!DOCTYPE html>
<html>
{% load staticfiles %}
<head lang="en">
    <meta charset="UTF-8">
    <title>{% block title %}{% endblock%}</title>
    {% block js_import %} {% endblock%}
    {% block css_import %} {% endblock%}
</head>
<body>
<div>
    <div>
        {% block head %}
        {% endblock %}

        <div class="body">
            <div class="left">
                {% block left %} {% endblock %}
             </div>
             <div class="middle">
                {% include "navigator.html" %}
                {% block middle %}{% endblock %}
             </div>
             {% block right %}
                <div class="right">
                </div>
             {% endblock %}
        </div>

        <div class="footer">
            {% block footer %}
               2013~2014 @copyright owned by xxx
            {% endblock %}
        </div>
    </div>
</div>

{% block footer_import_js %}{% endblock %}
{% block footer_js %}{% endblock %}
</body>
</html></span>

  整个文件我们可以看成是模板模式中的父类,定义了一些算法框架(即这里的{%block%}),而每个{%block%}段就是封装的具体的算法,

这些算法可能是由父类实现的,也可能延迟让子类负责实现.

  比如这里的{%block footer % },就是父类实现的页脚,要求子模板必须都继承这个页脚.而其余的像是{%block title%}{%block right%}等

就是留待子模板来具体实现的,这样既产生了一个框架,规范,实现了代码的复用,又给予了子类充分的能动性.

  需要注意的是,在模板模式里有个钩子(hook)的概念,在我看来,这个hook算是一个预留的平时不起作用的(方法体是空的)方法,如果需

要用到的话可以由子类去重写.起到出其不意的作用.看一下下面这个例子:

public abstract class Parent{
 public void abstractBusiness()
 {
    collectData();//父类实现的 收集数据
    dealWithData();//子类实现的 业务处理数据
    beforeSaveData();// hook方法1,方法体空
    saveData();// 父类实现的 保存数据
    afterSaveData();// hook方法2,方法体空
 }
}
  一般情况下,收集数据和保存数据的公用方法由父类来实现,具体的业务处理方法交由子类来具体实现.那么如果现在要求保存数据之

前要求对数据的有效性进行校验,beforeSaveData()方法就派上用场了,子类重写一下这个方法就可以了,如果要求数据保存之后还要发

送给其他的接口,那么再重写一下afterSaveData()方法.

  这就是模板方法,定义一个算法框架,包含一些自己实现或是交由子类实现的算法.保证代码复用的情况下,又具有相当的弹性,方便扩展

和维护.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值