美文网首页
模板模式

模板模式

作者: andpy | 来源:发表于2018-01-30 11:13 被阅读5次

    模板方法模式

    概念:通过定义一个算法的骨架,而将算法中的步骤延迟到子类,这样子类就可以复写这些步骤的实现来实现特定的算法.

    使用场景

    • 多个子类又共有的方法,并且逻辑基本相同(activity生命周期)
    • 重要复杂的算法,可以把核心算法设计为模板方法.
    • 重构时,模板方法模式是一个经常使用的模式.

    顶层接口:
    AbstractWork

    public abstract class AbstractWork {
        protected void getUp() {
            System.out.println("起床了");
        }
    
        protected abstract void goToWork();
    
        protected abstract void work();
    
        protected abstract void getOffWork();
    
        /**
         * TemplateMethod,共同调用的方法.
         */
        public final void newDay() {
            getUp();
            goToWork();
            work();
            getOffWork();
        }
    }
    

    子类一:

    public class BossWork extends AbstractWork {
        @Override
        protected void goToWork() {
            System.out.println("boss go to work by car");
        }
    
        @Override
        protected void work() {
            System.out.println("boss work ");
        }
    
        @Override
        protected void getOffWork() {
            System.out.println("boss get off work at 6:00 pm");
        }
    }
    

    子类二:

    public class StaffWork extends AbstractWork {
        @Override
        protected void goToWork() {
            System.out.println("employee  go to work by car");
        }
    
        @Override
        protected void work() {
            System.out.println("employee work ");
        }
    
        @Override
        protected void getOffWork() {
            System.out.println("employee get off work at 5:00 pm");
        }
    }
    

    测试

    public static void main(String[] args) {
        BossWork bossWork = new BossWork();
        StaffWork staffWork = new StaffWork();
        bossWork.newDay();
        staffWork.newDay();
    }
    

    模板小结

    • 抽象模板
    • 具体模板

    Android模板方法的运用

    • activity和fragment
    • AsyncTask

    相关文章

      网友评论

          本文标题:模板模式

          本文链接:https://www.haomeiwen.com/subject/bcnqzxtx.html