设计模式之模板模式

模板模板,重点在于模板两个字,既然是模板,肯定是有一些共性的内容的,或者是一套组合内容。我们把共性的这部分抽取出来,不就是父类吗。同样的既然他是模板,那就需要支持不同的情况,那么怎么支持呢,在子类中实现自己想要的方法啊。

就比如说是一份辞职信,哈哈,正好准备辞职。人事给了我一封固定的模板,我拿着这个模板,填写了我的个人信息,此时张三也想提离职,那么人事只需要把模板给他,他自行填写自己的信息。最后提交给人事处理就行了,这就是模板模式。

抽象类模板方法的实现

定义模板

package site.nemo.templete1;


import java.util.logging.Logger;

public abstract class templete {
    Logger logger = Logger.getLogger("templete");

    public  void  doTemplete(){//这部分就是共性
        logger.info("固定代码段");
        doSomeThing();
        logger.info("固定代码段");
    };
    public abstract void doSomeThing();//这就是每个人做的不同的事情
}

定义模板的实现方法1

package site.nemo.templete1;

import java.util.logging.Logger;

public class UseTemplete extends  templete{
    Logger logger = Logger.getLogger("templete");

    @Override
    public void doSomeThing() {
        logger.info("一哥想离职 ");
    }
}

定义模板的实现方法2

package site.nemo.templete1;

import java.util.logging.Logger;

public class UseTemplete2 extends  templete{
    Logger logger = Logger.getLogger("templete");

    @Override
    public void doSomeThing() {
        logger.info("张三想离职 ");
    }
}

定义测试的方法

package site.nemo.templete1;

public class TempleteTest {

    public static void main(String[] args) {
        UseTemplete UseTemplete=new UseTemplete();
        UseTemplete.doTemplete();

        UseTemplete2 UseTemplete2=new UseTemplete2();
        UseTemplete2.doTemplete();
    }
}

结果

 

 

 使用接口完成模板模式

定义接口,定义个性的不同方法

package site.nemo.templete2;

public interface Callback<V,T> {

    public  V doSomeThing(T t);
}

定义模板类方法

package site.nemo.templete2;

import site.nemo.templete1.templete;

import java.util.logging.Logger;

public  class UseTemplete3 {
    static Logger logger = Logger.getLogger("UseTemplete3");

    public static    void useTemplete(String str,Callback<String,String> callback){
        logger.info("固定代码");
        String result = callback.doSomeThing(str);
        logger.info(result);
        logger.info("固定代码");

    }
}

测试

package site.nemo.templete2;

import java.util.logging.Logger;

public class Test {
    static Logger logger = Logger.getLogger("Test");

    public static void main(String[] args) {
//        useTemplete("张三想离职", new Callback<String, String>() {
//            public String doSomeThing(String s) {
//                return s;
//            }
//        });
        UseTemplete3.useTemplete("一哥想离职", new Callback<String, String>() {
            public String doSomeThing(String s) {
                return s;
            }
        });
    }

    public  static void useTemplete(String str,Callback<String,String> callback){
        logger.info("固定代码");
        String result = callback.doSomeThing(str);
        logger.info(result);
        logger.info("固定代码");

    }
}

执行情况

 

posted @ 2021-07-12 16:33  小陈子博客  阅读(47)  评论(0编辑  收藏  举报