• java 设计模式之模板方法模式


    模板方法模式:定义一个具体的框架(抽象类),每个子类调用该框架,加入自己的实现。
    具体例子:

    package com.java.模版方法模式;
    
    /**
     * @author wangpei
     * @version 创建时间:2017年5月12日 下午8:35:00 类说明 ,封装变与不变,
     */
    public abstract class RefreshReverage {
        /* 封装所有子类遵循的算法框架 */
        public void zhunbeiyinliao() {
            zhufei();
            // 制饮料
            make();
            // 倒入杯中
            pour();
            // 添加调料
            if(IsAdd())
            add();
    
        }
    
        private void zhufei() {
            System.out.println("将水煮沸");
    
        }
    
        private void make() {
            System.out.println("make coffee");
    
        }
    
        protected abstract void pour();
    
        protected abstract void add();
        protected boolean IsAdd(){//钩子函数,在基类中提供一个默认或空的方法,具体子类可选择是否复写
            return true;
        }
    }
    
    package com.java.模版方法模式;
    /** 
     * @author wangpei 
     * @version 创建时间:2017年5月12日 下午8:46:31 
     * 类说明 
     */
    public class MakeTea  extends RefreshReverage{
    
    
        @Override
        protected void pour() {
             System.out.println("将茶叶导入");
    
        }
    
        @Override
        protected void add() {
             System.out.println("添加糖");
    
        }
        public static void main(String[] args) {
            RefreshReverage c=new MakeTea();
            c.zhunbeiyinliao();
        }
        protected boolean IsAdd(){//钩子函数,在基类中提供一个默认或空的方法,具体子类可选择是否复写
            return false;
        }
    
    }
    

    具体分析:
    定义一个模板方法,里面具体调用了一些private,protected修饰的方法,其中priavte修饰表示:子类不需要对该方法重写。protected:子类可选择的对该方法进行重写。
    子类继承对应模板方法的抽象类,并对protected方法进行重写。
    钩子方法的作用:钩子函数,在基类中提供一个默认或空的方法,具体子类可选择是否复写。
    优点
    适用于遵循一定的相似逻辑的操作。
    封装性好,
    复用性好。
    屏蔽细节(对子类屏蔽细节)
    便于维护
    缺点
    单继承,

  • 相关阅读:
    洛谷/SPOJ SP3267 题解
    洛谷P3834题解
    洛谷P2607题解
    可持久化0-1Trie树
    反悔贪心
    记录人生第一次面试
    赋值构造函数和赋值运算符
    使用VS2017遇到的一些小问题
    关于C++中extern的简单笔记
    MFC单文档
  • 原文地址:https://www.cnblogs.com/wangxiaopei/p/8551206.html
Copyright © 2020-2023  润新知