当前位置: 移动技术网 > IT编程>开发语言>Java > java设计模式--模板方法模式

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

2019年06月30日  | 移动技术网IT编程  | 我要评论

模板方法模式:用来定义一个操作中的算法的骨架,将一些具体步骤延迟到子类中。

//定义一个抽象类
public abstract class abstractclass{
    
   //抽象方法1,实现延迟到子类实现 public abstract void detailoperation1(stringbuffer stringbuffer);    //抽象方法2,同上 public abstract void detailoperation2(stringbuffer stringbuffer);    //模板方法,给出了逻辑的骨架 public void tempalte(){ stringbuffer stringbuffer = new stringbuffer();
     //一些固定的操作可以直接在该类实现 例如该注释下的第一行代码,另外一些细节可能产生变化的操作就把他们的实现放到子类去实现,如detailoperation1() stringbuffer.append("模板代码........"); detailoperation1(stringbuffer); detailoperation2(stringbuffer); stringbuffer.append("模板代码结束......."); system.out.println(stringbuffer); } }

具体的子类a,实现了父类的抽象方法。

public class concreteclassa extends abstractclass {

    @override
    public void detailoperation1(stringbuffer stringbuffer) {
        stringbuffer.append("concreteclassa detailoperation1....");
    }

    @override
    public void detailoperation2(stringbuffer stringbuffer) {
        stringbuffer.append("concreteclassa detailoperation2....");
    }
}

具体的子类b,同样实现了父类的抽象方法,但是实现的具体细节和a不同

public class concreteclassb extends abstractclass {

    @override
    public void detailoperation1(stringbuffer stringbuffer) {
        stringbuffer.append("concreteclassb detailoperation1....");
    }

    @override
    public void detailoperation2(stringbuffer stringbuffer) {
        stringbuffer.append("concreteclassb detailoperation2....");
    }
}

测试方法

public class test {
    public static void main(string[] args) {
        abstractclass concreteclassa = new concreteclassa();
        concreteclassa.tempalte();
        abstractclass concreteclassb = new concreteclassb();
        concreteclassb.tempalte();

    }
}

测试结果:

模板代码........concreteclassa detailoperation1....concreteclassa detailoperation2....模板代码结束.......
模板代码........concreteclassb detailoperation1....concreteclassb detailoperation2....模板代码结束.......

总结:当我们要完成一系列的步骤时,有一部分实现的细节不同,其他的操作都相同时,我们可以考虑使用模板方法模式,把不变的操作提炼到父类,不同的实现细节放到子类,这样就提高了代码的复用性。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网