模板模式Template概述:

1、定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中。

2、抽象模板角色:

      ①定义了一个或者多个抽象操作,以便让其子类实现

      ②定义并实现一个模板方法。

3、具体模板角色:

      ①实现父类所定义的一个或者多个抽象方法

      ②可以有任意多个具体模板角色,实现同一个抽象模板角色

      ③每一个具体模板角色都可以给出这些抽象方法的不同实现。

....

 

其实我不太喜欢把这些东西摆上去。来上传一个我简写的demo

  1. package Template; 
  2. /** 
  3.  *@Description: 模板模式 
  4.  *<a href="http://my.oschina.net/arthor" class="referer" target="_blank">@author</a>  http://www.hualai.net.cn    
  5.  *@date 2012-08-17 
  6.  *@version V1.0    
  7.  */ 
  8. public class App { 
  9.  
  10. public static void main(String[] args) { 
  11. Pillar pillar=new CirclePillar(103); 
  12. System.out.println("pillar's V="+pillar.getBulk()); 

柱子(圆形柱和矩形柱)抽象类

  1. package Template; 
  2. /** 
  3.  *@Description: 柱子(圆形柱和矩形柱)抽象类 
  4.  *<a href="http://my.oschina.net/arthor" class="referer" target="_blank">@author</a>  http://www.hualai.net.cn    
  5.  *@date 2012-08-17 
  6.  *@version V1.0    
  7.  */ 
  8. public abstract class Pillar{ 
  9. private float hight; 
  10.  
  11. public Pillar(float hight) { 
  12. this.hight = hight; 
  13.  
  14. /**获得体积**/ 
  15. public double getBulk(){ 
  16. return getUnderArea()*hight; 
  17.  
  18. protected abstract float getUnderArea(); 

 

圆柱类:

  1. package Template; 
  2. /** 
  3.  *@Description: 圆柱 
  4.  *<a href="http://my.oschina.net/arthor" class="referer" target="_blank">@author</a>  http://www.hualai.net.cn    
  5.  *@date 2012-08-17 
  6.  *@version V1.0    
  7.  */ 
  8. public class CirclePillar extends Pillar { 
  9. private float r; 
  10.  
  11. public CirclePillar(float hight,float r){ 
  12. super(hight); 
  13. this.r=r; 
  14.  
  15. @Override 
  16. public float getUnderArea() { 
  17. // TODO Auto-generated method stub 
  18. return  (float) (Math.PI*r*r); 

 

矩形柱类:
  1. package Template; 
  2. /** 
  3.  *@Description:矩形柱 
  4.  *<a href="http://my.oschina.net/arthor" class="referer" target="_blank">@author</a>  http://www.hualai.net.cn    
  5.  *@date 2012-08-17 
  6.  *@version V1.0    
  7.  */ 
  8. public class RectPillar extends Pillar { 
  9. private float length; 
  10. private float width; 
  11.  
  12. public RectPillar(float hight,float length,float width) { 
  13. super(hight); 
  14. this.length=length; 
  15. this.width=width; 
  16.  
  17. @Override 
  18. public float getUnderArea() { 
  19. return length*width; 

 

打印结果:

  1. pillar's V=282.74334716796875