zoukankan      html  css  js  c++  java
  • 设计模式-模块方法模式(TemplateMethod)

    模块方法模式是行为模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为。

    UML图:

    具体代码:

    /**
     * 抽象-模块方法模式核心
     */
    public abstract class AbstractPage {
        public abstract void makeHeader();//组装页面头部
        public abstract void makeBody();//组装页面body
        public abstract void makeFooter();//组装页脚
    
        public void make(){
            makeHeader();//组装头
            makeBody();//组装身
            makeFooter();//组装脚
        }
    }
    /**
     * 页面1
     */
    public class Page1 extends AbstractPage{
        @Override
        public void makeHeader() {
            System.out.println("页面1,写头");
        }
    
        @Override
        public void makeBody() {
            System.out.println("页面1,写身");
        }
    
        @Override
        public void makeFooter() {
            System.out.println("页面1,写脚");
        }
    }
    /**
     * 页面2
     */
    public class Page2 extends AbstractPage{
        @Override
        public void makeHeader() {
            System.out.println("页面2,写头");
        }
    
        @Override
        public void makeBody() {
            System.out.println("页面2,写身");
        }
    
        @Override
        public void makeFooter() {
            System.out.println("页面2,写脚");
        }
    }
    public class Main {
        public static void main(String[] args) {
            AbstractPage page1 = new Page1();
            page1.make();//页面1拼装
    
            System.out.println("---------------------------");
    
            AbstractPage page2 = new Page2();
            page2.make();//页面2拼装
        }
    }

    结果:

    页面1,写头
    页面1,写身
    页面1,写脚
    ---------------------------
    页面2,写头
    页面2,写身
    页面2,写脚

    应用场景:

    1.具有统一的操作步骤或操作过程

    2.具有不同的操作细节

    3.存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同

    源码地址:https://github.com/qjm201000/design_pattern_templateMethod.git

  • 相关阅读:
    为博客园选择一个小巧霸气的语法高亮插件
    再议 js 数字格式之正则表达式
    [扯蛋] 项目说
    浅谈 js 语句块与标签
    Yii 自定义模型路径
    js小记 function 的 length 属性
    js拾遗:appendChild 添加移动节点
    浅谈 IE下innerHTML导致的问题
    浅谈 js 数字格式类型
    [hihoCoder] 第四十九周: 欧拉路·一
  • 原文地址:https://www.cnblogs.com/qjm201000/p/10107571.html
Copyright © 2011-2022 走看看