设计模式-----模板方法模式

设计模式-----单例模式

设计模式-----适配器模式

设计模式-----建造者模式

 

模板方法模式:

定义:定义一个模板类抽象类,共同特性(非抽象方法)到当前类中实现,其他特性(抽象方法)到对应的子类中实现

示例+注释

模板方法

/*
 * 抽象基类,为所有子类提供一个算法框架
 */
//   提供final修饰的模板方法 封装了所有子类共同遵循的算法框架  该方法中主要有两类:
//   1.抽象基类(包括基本方法(共有特性)、抽象方法(相似或特有特性由子类实现)、默认钩子方法 可选(通过抽象子类重写控制流程等)
//   2.具体子类 实现部分抽象方法,方便适配不同的规则   可选再子类中覆写钩子方法  方便控制模板执行流程
public abstract class Template {
    /*
     * 模板方法
     * 封装了所有子类共同的算法框架
     */
    //final 修饰,不能被子类复写。该模板由当前类所有,防止子类改变原有的模板
    //通用公用的方法  用private修饰(共有属性)
    //业务相似的方法以抽象方法形式体现,具体实现由子类完成。
    public final void templateMethod(){
        //共同属性一
        commonMethod1();
        //共同属性二
        commonMethod2();
        //特有属性一
        specifiedMethod1();
        if(isRun()){
            //特有属性二
            specifiedMethod2();
        }
    }
    /*
     * Hook, 钩子函数,提供一个默认或空的实现
     * 具体的子类可以自行决定是否挂钩以及如何挂钩
     * 是否运行
     */
    protected boolean isRun() {
        return true;
    }
    //通用公用的方法  用private修饰(共有属性)
    private void commonMethod1() {
        System.out.println("共同属性一");
    }
    private void commonMethod2() {
        System.out.println("共同属性二");
    }
    //特有属性一  修饰符视情况而定
    protected abstract void specifiedMethod1();
    //特有属性二
    protected abstract void specifiedMethod2();
}

 

各子类实现:

class Specified1 extends Template {
    protected void specifiedMethod1() {
        System.out.println("Specified1   method 1");
    }

    protected void specifiedMethod2() {
        System.out.println("Specified1   method 2");
    }
}
class Specified2 extends Template {
    protected void specifiedMethod1() {
        System.out.println("Specified2   method1");
    }
    protected void specifiedMethod2() {
        System.out.println("Specified2   method2");
    }
    //重写父类钩子方法   控制显示
    @Override
    protected boolean isRun() {
        return false;
    }
}
public class Test{

    public static void main(String[] args) {
        Template specified1 = new Specified1();
        Template specified2 = new Specified2();
        specified1.templateMethod();
        System.out.println("........................");
        specified2.templateMethod();
    }


}

 

结果:

共同属性一
共同属性二
Specified1   method 1
Specified1   method 2
........................
共同属性一
共同属性二
Specified2   method1

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值