• 初识设计模式之模板方法模式


    • 模式简介
    • 代码实现

    模式简介

    按我个人理解来说,顾名思义嘛,模板方法模式是和模板有关的,一说到模板我便不自觉就想到抽象类、接口了,那么模板方法不就是在父类里定义一些方法,作为一个模板把这些方法延后到子类中实现吗?如此一来,子类就得按照父类这个模板来进行一些方法的实现了。说了一堆..感觉还是没说明白,还是上代码吧....

    代码实现

    小韦是个初出茅庐的大学生,毕业后进了一个手机壳加工厂工作...工作一个月后,他发现工厂生产不同手机壳的工艺流程其实是一样的,都是先打印摸具、染色、质量检测,最后包装。他发现,同样的工艺流程生产不同手机壳的关键就在于具体工艺的不同实现。

    手机壳抽象类
    public abstract class PhoneShell {
        /**
         * 制作手机壳模具
         */
        public abstract void makeModel();
    
        /**
         * 手机壳染色
         */
        public abstract void dye();
    
        /**
         * 手机壳质量检测
         */
        public abstract void qualityTest();
    
        /**
         * 包装手机壳
         */
        public void assemble(){
            System.out.println("正在进行手机壳制作");
            makeModel();
            dye();
            qualityTest();
            System.out.println("手机壳组装完成");
        }
    }
    
    具体的两款手机壳类
    public class HwPhoneShell extends PhoneShell{
        @Override
        public void makeModel() {
            System.out.println("正在制作HwPhoneShell");
        }
    
        @Override
        public void dye() {
            System.out.println("正在给手机壳染红色");
        }
    
        @Override
        public void qualityTest() {
            System.out.println("正在给手机壳做压力测试");
        }
    }
    
    public class XmPhoneShell extends PhoneShell{
        @Override
        public void makeModel() {
            System.out.println("正在制作XmPhoneShell");
        }
    
        @Override
        public void dye() {
            System.out.println("正在给手机壳染黄色");
        }
    
        @Override
        public void qualityTest() {
            System.out.println("正在给手机壳进行形变测试");
        }
    }
    
    测试类
    public class Woker {
        public static void main(String[] args) {
            System.out.println("正在启动手机壳的工艺流程,请稍等...");
            PhoneShell hwPhoneShell = new HwPhoneShell();
            PhoneShell xmPhoneShell = new XmPhoneShell();
            System.out.println("进入手机壳工艺流程..");
            hwPhoneShell.assemble();
            xmPhoneShell.assemble();
            System.out.println("两款手机壳制作完毕!");
        }
    }
    

    过了一会,小韦开始琢磨着为什么要进行统一的工艺流程呢?后来,小韦问了位厂里的老师傅,老师傅语重心长地答道:“你看啊,这个流水线是不是都是生产手机壳的,而手机壳的生产过程中,有些生产方法是一样的,有些是不一样的。为了提升生产效率,我们就把所有手机壳的生产流程统一起来,这样我们就只需要改变那些不一样的工艺就好了。小韦啊,我这样说你懂了吗?”小韦似懂非懂的点了点头。

  • 相关阅读:
    本地邮件系统的安装及配置
    通用性站点管理后台(Bee OPOA Platform) (2) 快速开发特性
    (转).NET Framework 自动内存管理机制深入剖析 (C#分析篇)
    通用性站点管理后台(Bee OPOA Platform) (3) MVC特性
    通用性站点管理后台(Bee OPOA Platform) (4) DAL
    通用性站点管理后台(Bee OPOA Platform) (1)
    【讨论】一个接口的世界
    Ubuntu Mono 初体验
    发现assembly的dll在temp里,AppDomain无法动态加载那个assembly
    熟知android模拟器的快捷键
  • 原文地址:https://www.cnblogs.com/xunxian/p/13956088.html
Copyright © 2020-2023  润新知