设计模式整理_模板模式

Posted 大胡龙的小圈子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式整理_模板模式相关的知识,希望对你有一定的参考价值。

  模板模式在父类中定义了一个方法的模板,而子类可以动态的实现模板成分方法,但是模板中的方法顺序无法改变.

  父类中的模板方法往往申明为final,用来保证方法不被子类覆盖,因为作为模板,是不可以改变的,但是模板方法内的一系列方法,可以由子类自己静态实现,同时在父类的模板方法中,可以定义钩子(hook)方法.方便子类对于模板方法的优化.下面用两个例子说明.

/*没有钩子(hook)的模板方法,此时模板方法无法修改*/
public abstract class Model {
    public final void eat()/*模板方法*/ {
        prepareFood();
        cookFood();
        eatFood();
    }

    public abstract void prepareFood();//交给子类去实现的方法

    public abstract void cookFood();//交给子类去实现的方法

    public abstract void eatFood();//交给子类去实现的方法
}
class Girl extends Model {
    /*子类实现玩需要实现的方法后,模板方法即可调用,完成操作*/
    @Override
    public void prepareFood() {
        System.out.println("女生在准备饭菜!");
    }

    @Override
    public void cookFood() {
        System.out.println("女生在做饭!");
    }

    @Override
    public void eatFood() {
        System.out.println("女生在吃饭!");
    }
    
}
/*有钩子(hook)的模板方法,此时模板可以由子类自由修改*/
public abstract class Model {
    public final void eat()/*模板方法*/ {
        prepareFood();
        if(hook())
        cookFood();        
        eatFood();
    }

    public boolean hook() {
        return true;
    }

    public abstract void prepareFood();//交给子类去实现的方法

    public abstract void cookFood();//交给子类去实现的方法

    public abstract void eatFood();//交给子类去实现的方法
}
class Girl extends Model {
    /*子类实现玩需要实现的方法后,模板方法即可调用,完成操作*/
    @Override
    public void prepareFood() {
        System.out.println("女生在准备方便面!");
    }

    @Override
    public void cookFood() {
        System.out.println("");
    }

    @Override
    public void eatFood() {
        System.out.println("女生在吃方便面!");
    }
    
    public boolean hook()/*此方法在子类中返回为false后,cook方法将
    无法调用,因此改变了模板方法,这类方法又称为"钩子",可以改变模板方法.*/ {
        return false;
    }
}

 

以上是关于设计模式整理_模板模式的主要内容,如果未能解决你的问题,请参考以下文章

Android:带有片段的模板模式

设计模式整理_工厂模式

设计模式整理_迭代器模式

是否有在单个活动中处理多个片段的 Android 设计模式?

设计模式_模板方法模式

设计模式整理