Android设计模式-模版方法模式

2019-11-01  本文已影响0人  星宇V

UML关系简单介绍
UML简单使用的介绍
创建型设计模式
Android设计模式-单例模式
Android设计模式-工厂模式
Android设计模式-抽象工厂模式
Android设计模式-建造者模式
Android设计模式-原型模式
结构型设计模式
Android设计模式-代理模式
Android设计模式-装饰模式
Android设计模式-适配器模式
Android设计模式-组合模式
Android设计模式-门面模式
Android设计模式-桥接模式
Android设计模式-享元模式
行为型设计模式
Android设计模式-策略模式
Android设计模式-命令模式
Android设计模式-责任链模式
Android设计模式-模版方法模式
Android设计模式-迭代器模式
Android设计模式-观察者模式
Android设计模式-备忘录模式
Android设计模式-中介者模式
Android设计模式-访问者模式
Android设计模式-状态模式
Android设计模式-解释器模式

1.定义

定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

2.模版方法模式UML图

模版方法模式UML图

角色介绍

为了防止子类的修改,一般都会给模版方法加上final修饰
抽象模版中的基本方法最好设置为protected类型,不需要暴露的属性和方法尽量不要设置为protected类型。实现类若非必要,尽量不要扩大父类中的访问权限。

简单实现

抽象模版

public abstract class AbstractClass {
    protected abstract void m1();
    protected abstract void m2();
    protected abstract void m3();

    public final void doMethod(){
        m1();
        m2();
        m3();
    }
}

具体实现类

public class ConcreteClass1 extends AbstractClass {
    @Override
    protected void m1() {
        System.out.println("先进行步骤a");
    }

    @Override
    protected void m2() {
        System.out.println("先进行步骤b");
    }

    @Override
    protected void m3() {
        System.out.println("先进行步骤c");
    }
}


public class ConcreteClass2 extends AbstractClass {
    @Override
    protected void m1() {
        System.out.println("先进行步骤c");
    }

    @Override
    protected void m2() {
        System.out.println("先进行步骤a");
    }

    @Override
    protected void m3() {
        System.out.println("先进行步骤b");
    }
}

客户端调用

public class MyClass {
    public static void main(String args[]) {
        AbstractClass class1=new ConcreteClass1();
        class1.doMethod();


        System.out.println("----------");

        AbstractClass class2=new ConcreteClass2();
        class2.doMethod();
    }
}


打印结果

先进行步骤a
先进行步骤b
先进行步骤c
----------
先进行步骤c
先进行步骤a
先进行步骤b

其实模版方法也就是简单用到了类的继承,当然实现上也不是必须修改具体的方法才能修改具体执行顺序,也可以在抽象类中的模版方法内,添加返回值为boolean类型的方法进行判断,然后子类中重写这种方法,也就能做到子类间接控制父类模版方法内的执行顺序。

4.总结

4.1优点

4.2缺点

4.3使用场景

上一篇 下一篇

猜你喜欢

热点阅读