程序员人生 网站导航

<七>读<<大话设计模式>>之模板模型

栏目:互联网时间:2014-11-24 08:42:03

 

       哈哈,真没想到,不知不觉已写到第7篇文章了,看来本人还是很有毅力的。其实坚持1件事很简单,只要你每天不断的朝着自己的目标动身,任何事情都不会挡着你。好了大道理不多说,谁都懂,那看看这个模板模式大家懂不懂了。

对模板模式可能听起来很吓人,其实大家都用过,只是不知道罢了,也很简单。从字面意思上看就是我写出1个模板,然后其他类直接继承它就能够具有模板类中的东西了,听起来像继承的定义,是的,就像现在开发1个论坛,为了能够开发速度更快,我们通常就是网上找1个模板下载下来,然后在模板基础上进行2次开发,道理1个样。

      模板模型定义:定义1个操作中的算法的股价,而将1些步骤延迟到子类中。模板方法使得子类可以不改变1个算法的结构便可重定义该算法的某些特定步骤。

        <<大话设计模式>>对本章是以“小菜”http://www.wfuyu.com/cxyms/解答选择题为故事展开的,意思是所有的选择题都是1样的,不1样的就是答题者的答案而已,那末开发这个程序的变化点就是答案,不变的就是题目,那好我们将题目封装到抽象类中,子类封装答案便可,这就是模板模型。

空话不多说,照样上代码

1、模板抽象类,将子类共有的代码封装起来

publicabstractclass AbstratorClass {

 

    publicabstractvoid method1();

    publicabstractvoid method2();

    //模板方法,其实就是将公共的东西放到抽象类里面去了,即子类继承1个共同的模板,减少代码重合,增强复用

    publicvoid templateMethod(){

       method1();

       method2();

       System.out.println("我是模板");

    }

}

2、子类AB

publicclass ClassA extends AbstratorClass {

 

    @Override

    publicvoid method1() {

       // TODO Auto-generatedmethod stub

 

       System.out.println("我是类A的方法1");

    }

 

    @Override

    publicvoid method2() {

       // TODO Auto-generatedmethod stub

 

       System.out.println("我是类A的方法2");

    }

 

}

publicclass ClassB extends AbstratorClass {

 

    @Override

    publicvoid method1() {

       // TODO Auto-generatedmethod stub

 

       System.out.println("我是类B的方法1");

    }

 

    @Override

    publicvoid method2() {

       // TODO Auto-generatedmethod stub

 

       System.out.println("我是类B的方法2");

    }

 

}

3、客户端调用

publicclass TemplateClient {

 

    /**

     * @param args

     */

    publicstaticvoid main(String[] args) {

       // TODO Auto-generatedmethod stub

 

       AbstratorClass class1 = new ClassA();

       class1.templateMethod();

       class1 = new ClassB();

       class1.templateMethod();

    }

 

}

 

其实关键代码就1个地方,就是抽象类中封装的模板方法,而子类中的方法就是自己的逻辑了,想怎样写都可以了与其他子类无关,唯1相同的就是模板中的逻辑了。

 

总结:模板方法模式是通过把不变行动搬移到超类,去除子类中的重复代码来体现它的优势。其实就是提供了1个很好的代码复用平台,由于有时候,我们会遇到由1系列步骤构成的进程需要履行。这个进程从高层次上看是相同的,但是步骤的实现可能不同。这时候候,模板方法模式该上场了………

 

附上代码:http://download.csdn.net/detail/jzhf2012/8102387

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐