行为模式之模板方法模式

总纲

  • 设计原则:破坏里氏替换,体现功能复用
  • 常用场景:一批子类的功能有可提取的公共算法骨架
  • 使用概率:80%
  • 复杂度:中低
  • 变化点:算法骨架内各个步骤的具体实现
  • 选择关键点:算法骨架是否牢固
  • 逆鳞:无

模板方法

  • 通常情况下,模板方法模式用于定义构建某个对象的步骤与顺序,或者定义一个算法的骨架。
  • 类加载器的模板方法
 public abstract class ClassLoader {
        //这是一个重载方法
        public Class loadClass(String name) throws ClassNotFoundException {
            return loadClass(name, false);
        }

        //这里就是父类算法的定义
        protected synchronized Class loadClass(String name, boolean resolve)
                throws ClassNotFoundException {
            Class c = findLoadedClass(name);
            if (c == null) {
                try {
                    if (parent != null) {
                        c = parent.loadClass(name, false);
                    } else {
                        c = findBootstrapClass0(name);
                    }
                } catch (ClassNotFoundException e) {
                    c = findClass(name);
                }
            }
            if (resolve) {
                resolveClass(c);
            }
            return c;
        }

        //这里留了一个方法给子类选择性覆盖
        protected Class findClass(String name) throws ClassNotFoundException {
            throw new ClassNotFoundException(name);
        }

    }
  • 从代码上我们可以看出,在ClassLoader中定义的算法顺序是。

            1,首先看是否有已经加载好的类。
    
            2,如果父类加载器不为空,则首先从父类类加载器加载。
    
            3,如果父类加载器为空,则尝试从启动加载器加载。
    
            4,如果两者都失败,才尝试从findClass方法加载。

你可能感兴趣的:(行为模式之模板方法模式)