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

    一、模板方法的使用场景

    在软件构建过程中,对某一项任务,它常常有稳定的整体操作结构,但是各个子步骤有很多改变需求,或者由于固有原因(如框架和应用之间的关系)而无法和任务的整体结构同时实现。如何在确定一个稳定操作的前提下,来灵活应对各个子步骤的变化,或者晚期实现需求。

    我们先看一个例子:

    //类库开放人员
    public class Library {
    
        public void step1() {
    
        }
    
        public void step3() {
    
        }
    
        public void step5() {
    
        }
    }

    //应用开发人员
    public class Application {
    
        public boolean step2() {
            return true;
        }
    
        public void step4() {
    
        }
    
        public static void main(String[] args) {
            Library library = new Library();
            Application application = new Application();
    
            library.step1();
    
            if (application.step2()) {
                library.step3();
                application.step4();
            }
            library.step5();
        }
    }

    某个功能需要使用5个方法,类库开发人员只能实现其中三个,另外的需要应用开放人员去开发,再进行组合。可能你也会这么做吧,但是这么做其实并不是一个完美的解决方案。因为main方法的整个流程是固定的,只是其中的几个步骤的实现是可变的。

     二、使用模板方法

    我们对Library类进行改良:

    //类库开放人员
    public abstract class Library {
    
        private void step1() {
    
        }
    
        private  void step3() {
    
        }
    
        private void step5() {
    
        }
        
        protected abstract boolean step2();
    
        protected abstract void step4();
        
        
        public void run() {
            step1();
            if(step2()) {
                step3();
                step4();
            }
            step5();
        }
    }
    //应用开发人员
    public class Application extends Library{
    
        public boolean step2() {
            return true;
        }
    
        public void step4() {
    
        }
    
        public static void main(String[] args) {
            Application application = new Application();
            application.run();
        }
    }

    应用开放人员不需要再关心方法的调用流程,只需要实现定制的方法即可,将早绑定变为晚绑定,从而实现代码的重用,降低开放人员的开放难度。简单好用

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    Autotools使用流程【转】
    Linux下GCC生成和使用静态库和动态库【转】
    Linux驱动模块的Makefile分析【转】
    GNU C 中零长度的数组【转】
    Linux设备驱动中的IO模型---阻塞和非阻塞IO【转】
    程序(进程)内存分布解析【转】
    【转】用户空间使用i2c_dev--不错
    开源课堂网址
    【转】用Device tree overlay掌控Beaglebone Black的硬件资源
    【转】Device Tree(三):代码分析
  • 原文地址:https://www.cnblogs.com/ChenBingJie123/p/14342738.html
Copyright © 2011-2022 走看看