Template Method模式

模版方法模式,实际上就是指子类做方法实现,父类做算法实现。

通常情况下,子类继承父类,我们是站在子类的视角上来看父类的,目的不外乎下面三个

  • 1,子类继承父类的方法
  • 2,通过子类来增加方法,实现新的功能
  • 3,子类重写父类方法,来改变程序的行为

今天,我们站在父类的角度俩看待这个问题,我们声明了抽象方法,并将抽象方法来交给子类实现,,所以,父类的要求就是如下

  • 1,要求子类实现抽象方法

从父类的角度来看,这就是模版工厂方法。

下面举个例子,比如说手机有一个功能,就是打电话,用软件工程的属于来说,这是一个算法,,这个算法包括三个步骤,拨号,通话,挂断这三个,但是不同的厂家对这三个方法的实现不一样,比如说

老式诺基亚

  • 拨号->按键盘的数字键
  • 通话->按通话键
  • 挂断->按挂断键

iphone

  • 拨号->触屏拨号
  • 通话->点击触屏通话键
  • 挂断->点击触屏挂断键

金立语音王。。。。

  • 拨号+通话+挂断->声控,给张总打电话

尽管不同的厂家的实现方法不一样,但是最后这个算法是电话来定的,也就是拨号,通话,挂断,也就是说各个厂家给不同的实现(即拨号,通话,挂断的实现方法),而手机则规定同一的算法(打电话,算法给先拨号,后通话,最后挂断)。到这里,这个模版方法基本上了解了吧,就是子类实现父类的抽象方法,而父类指定算法,这个算法不能更改。

好了,上面的叙述完了,下面就是具体的代码了

父类,规定子类的要实现的方法和自己的算法

package templatemethod;

public abstract class AbstractDisplay {
       //方法
    public abstract void open();
    public abstract void begin();
    public abstract void close();
    //算法
    public final void display(){
        open();
        for(int i=0;i<5;i++){            
            begin();
        }
        close();
    }
}

子类,实现父类的要实现的方法

package templatemethod;

public class CharDisplay extends AbstractDisplay {

    private String displaystr;
    
    public String getDisplaystr() {
        return displaystr;
    }

    public void setDisplaystr(String displaystr) {
        this.displaystr = displaystr;
    }

    public CharDisplay(String str){
       this.displaystr = str;
    }
    
    @Override
    public void open() {
        System.out.println("******this is chardisplay***********");
    }

    @Override
    public void begin() {
        System.out.println(this.displaystr);
    }

    @Override
    public void close() {    
        System.out.println("******this is end***********");
    }

}

测试类

package templatemethod;

public class test {

    public static void main(String[] args) {
        AbstractDisplay ad = new CharDisplay("hello, world");
        ad.display();
    }

}

 

posted @ 2015-03-21 08:34  凝荷  阅读(127)  评论(0编辑  收藏  举报