欢迎使用CSDN-markdown编辑器

Java 模板模式

模板模式:封装了一个算法步骤,并允许子类为一个或多个步骤方法提供实现
模板模式可以使子类在不改变算法结构的情况下,重新定义算法中的某些步骤。
重点内容
模板设计类,里面包含三种设计方法。

第一种是:继承父类中的抽象方法。 eg:addCondiments() 具体的实现方法,去有子类,重写完成。

第二种是: 带有Hook,称之为 ,带有钩子的方法。wantCondimentsHook(),其思想是 ,子类实现这个模板的 这个方法之前加以判断,是否完全继承 父类的这个方法。 不是,就自己另外重写。 具有很强的灵活性。

public final void prepareRecipe() {
boilWater();
brew();
pourInCup();
if(wantCondimentsHook())
{
addCondiments();
}else{
System.out.println(“No Condiments”);
}

    }
    public boolean wantCondimentsHook()
    {
    return true;
    }
    public final void boilWater() {
    System.out.println("Boiling water");
    }


    public abstract void brew();


    public  final void pourInCup() {
    System.out.println("Pouring into cup");
    }


    public abstract void addCondiments();

templateMethod(): 抽象类 模板里面的方法执行顺序。
eg: prepareRecipe() 这个 方法里面加载 具体实现类 预加载执行的方法:
public void prepareRecipe() {
boilWater();
brewCoffee();
pourInCup();
addSugarMilk();
}

带有钩子hook 执行方法 :
public final void prepareRecipe() {
boilWater();
brew();
pourInCup();
if(wantCondimentsHook())
{
addCondiments();
}else{
System.out.println(“No Condiments”);
}

        }
        public boolean wantCondimentsHook()
        {
        return true;
        }
        public final void boilWater() {
        System.out.println("Boiling water");
        }


        public abstract void brew();


        public  final void pourInCup() {
        System.out.println("Pouring into cup");
        }


            public abstract void addCondiments();


            在子类 里面 重写 带有hook() 的方法,来改变原有的方法。  eg:
                      @Override
            public boolean wantCondimentsHook()
            {
            System.out.println("Condiments,yes or no?please input(y/n):");
            BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
            String result="";
            try {
            result=in.readLine();
            } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            }
            if(result.equals("n"))
            {
            return false;
            }

            return true;
            }

你可能感兴趣的:(设计模式,java,设计)