• 设计模式整理_模板模式


      模板模式在父类中定义了一个方法的模板,而子类可以动态的实现模板成分方法,但是模板中的方法顺序无法改变.

      父类中的模板方法往往申明为final,用来保证方法不被子类覆盖,因为作为模板,是不可以改变的,但是模板方法内的一系列方法,可以由子类自己静态实现,同时在父类的模板方法中,可以定义钩子(hook)方法.方便子类对于模板方法的优化.下面用两个例子说明.

    /*没有钩子(hook)的模板方法,此时模板方法无法修改*/
    public abstract class Model {
        public final void eat()/*模板方法*/ {
            prepareFood();
            cookFood();
            eatFood();
        }
    
        public abstract void prepareFood();//交给子类去实现的方法
    
        public abstract void cookFood();//交给子类去实现的方法
    
        public abstract void eatFood();//交给子类去实现的方法
    }
    class Girl extends Model {
        /*子类实现玩需要实现的方法后,模板方法即可调用,完成操作*/
        @Override
        public void prepareFood() {
            System.out.println("女生在准备饭菜!");
        }
    
        @Override
        public void cookFood() {
            System.out.println("女生在做饭!");
        }
    
        @Override
        public void eatFood() {
            System.out.println("女生在吃饭!");
        }
        
    }
    /*有钩子(hook)的模板方法,此时模板可以由子类自由修改*/
    public abstract class Model {
        public final void eat()/*模板方法*/ {
            prepareFood();
            if(hook())
            cookFood();        
            eatFood();
        }
    
        public boolean hook() {
            return true;
        }
    
        public abstract void prepareFood();//交给子类去实现的方法
    
        public abstract void cookFood();//交给子类去实现的方法
    
        public abstract void eatFood();//交给子类去实现的方法
    }
    class Girl extends Model {
        /*子类实现玩需要实现的方法后,模板方法即可调用,完成操作*/
        @Override
        public void prepareFood() {
            System.out.println("女生在准备方便面!");
        }
    
        @Override
        public void cookFood() {
            System.out.println("");
        }
    
        @Override
        public void eatFood() {
            System.out.println("女生在吃方便面!");
        }
        
        public boolean hook()/*此方法在子类中返回为false后,cook方法将
        无法调用,因此改变了模板方法,这类方法又称为"钩子",可以改变模板方法.*/ {
            return false;
        }
    }
  • 相关阅读:
    Nginx的日志剖析
    黑帽大会:苹果网络服务器比微软易入侵 狼人:
    美国安全局大力招募黑客 狼人:
    微软MAC地址数据库惊爆安全门:任何人都可以定位你 狼人:
    云网络被广泛应用 企业SaaS选型面临五大安全问题 狼人:
    华为聘请英国政府前CIO为首任全球网络安全官 狼人:
    莫使微博成黑客“投毒”新渠道 狼人:
    黑帽大会:Windows密码存储机制存在漏洞 狼人:
    思科增强云计算效率与安全性 狼人:
    德国安全专家成功破解GPRS加密算法 狼人:
  • 原文地址:https://www.cnblogs.com/hlhdidi/p/5602055.html
Copyright © 2020-2023  润新知