zoukankan      html  css  js  c++  java
  • 设计模式之模板模式

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

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

    抽象类模板方法的实现

    定义模板

    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("固定代码");
    
        }
    }

    执行情况

  • 相关阅读:
    zookeeper curator ( 实战一)
    【转】HDMI之TMDS信号
    【转】LVDS基础、原理、图文讲解
    【原】HDMI输出接口传输速率计算
    【转】 HDMI介绍与流程
    【转】 glibc detected *** corrupted double-linked list:错误的原因有如下三种可能
    【转】 ISP-镜头阴影校正(LSC)
    【转】 ISP-黑电平校正(BLC)
    【转】 ISP概述、工作原理及架构
    【转】 VGA时序及其原理
  • 原文地址:https://www.cnblogs.com/cj8357475/p/15002590.html
Copyright © 2011-2022 走看看