23种设计模式之模板

目录

 

1.简介

2.优点

3.缺点

4.形式

5.扩展


1.简介

定义一个操作中算法的框架,将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。它里面涉及到两类方法,一类是基本方法,一类是模板方法。基本方法主要是一些单个方法,模板方法是由基本方法组成,主要是为完成一些固定的逻辑。

2.优点

封装不变,扩展可变。将不变的部分封装到父类,子类通过继承实现可变的扩展。简化了代码,有利于代码维护,也符合OCP。

3.缺点

由于模板方法的实现形式,在复杂的项目中,可能会造成阅读的难度。

4.形式

抽象模板类

public abstract class AClass {
    protected abstract void basicMethod1();
    protected abstract void basicMethod2();
    
    public void templateMethod() {
        basicMethod1();
        basicMethod2();
    }
}

具体模板类1

public class ConcreteClass1 extends AClass {
    protected void basicMethod1() {
        System.out.println("具体模板类1方法1");
    }
    protected void basicMethod2() {
        System.out.println("具体模板类1方法2");
    }
}

具体模板类2

public class ConcreteClass2 extends AClass {
    protected void basicMethod1() {
        System.out.println("具体模板类2方法1");
    }
    protected void basicMethod2() {
        System.out.println("具体模板类2方法2");
    }
}

具体实现

public class Reality {
    public static void main(String[] args) {
        AClass class1 = new ConcreteClass1();
        AClass class2 = new ConcreteClass2();
        class1.templateMethod();
        class2.templateMethod();
    }
}

5.扩展

有些情况,需要根据外部的需要选择方法运行,那么这里就得提到它的好基友钩子方法。该方法通过外界的控制从而把控具体逻辑的实现,也更加的灵活。

抽象模板类扩展

public abstract class AClass {
    protected abstract void basicMethod1();
    protected abstract void basicMethod2();
    
    protected boolean isBasicMethod1() {
        return true;
    }

    public void templateMethod() {
        if(this.isBasicMethod1()) {
            basicMethod1();
        }
        basicMethod2();
    }
}

具体模板类1扩展

public class ConcreteClass1 extends AClass {
    private boolean isBM1Flag = true;
    protected void basicMethod1() {
        System.out.println("具体模板类1方法1");
    }
    protected void basicMethod2() {
        System.out.println("具体模板类1方法2");
    }
    public void setBasicMethod1(boolean isBM1Flag) {
        this.isBM1Flag = isBM1Flag;
    }
}

具体模板类2扩展与1类似,最后只需要在实际中输入相应值就好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值