• Template Method模式


    模版方法模式,实际上就是指子类做方法实现,父类做算法实现。

    通常情况下,子类继承父类,我们是站在子类的视角上来看父类的,目的不外乎下面三个

    • 1,子类继承父类的方法
    • 2,通过子类来增加方法,实现新的功能
    • 3,子类重写父类方法,来改变程序的行为

    今天,我们站在父类的角度俩看待这个问题,我们声明了抽象方法,并将抽象方法来交给子类实现,,所以,父类的要求就是如下

    • 1,要求子类实现抽象方法

    从父类的角度来看,这就是模版工厂方法。

    下面举个例子,比如说手机有一个功能,就是打电话,用软件工程的属于来说,这是一个算法,,这个算法包括三个步骤,拨号,通话,挂断这三个,但是不同的厂家对这三个方法的实现不一样,比如说

    老式诺基亚

    • 拨号->按键盘的数字键
    • 通话->按通话键
    • 挂断->按挂断键

    iphone

    • 拨号->触屏拨号
    • 通话->点击触屏通话键
    • 挂断->点击触屏挂断键

    金立语音王。。。。

    • 拨号+通话+挂断->声控,给张总打电话

    尽管不同的厂家的实现方法不一样,但是最后这个算法是电话来定的,也就是拨号,通话,挂断,也就是说各个厂家给不同的实现(即拨号,通话,挂断的实现方法),而手机则规定同一的算法(打电话,算法给先拨号,后通话,最后挂断)。到这里,这个模版方法基本上了解了吧,就是子类实现父类的抽象方法,而父类指定算法,这个算法不能更改。

    好了,上面的叙述完了,下面就是具体的代码了

    父类,规定子类的要实现的方法和自己的算法

    package templatemethod;
    
    public abstract class AbstractDisplay {
           //方法
        public abstract void open();
        public abstract void begin();
        public abstract void close();
        //算法
        public final void display(){
            open();
            for(int i=0;i<5;i++){            
                begin();
            }
            close();
        }
    }

    子类,实现父类的要实现的方法

    package templatemethod;
    
    public class CharDisplay extends AbstractDisplay {
    
        private String displaystr;
        
        public String getDisplaystr() {
            return displaystr;
        }
    
        public void setDisplaystr(String displaystr) {
            this.displaystr = displaystr;
        }
    
        public CharDisplay(String str){
           this.displaystr = str;
        }
        
        @Override
        public void open() {
            System.out.println("******this is chardisplay***********");
        }
    
        @Override
        public void begin() {
            System.out.println(this.displaystr);
        }
    
        @Override
        public void close() {    
            System.out.println("******this is end***********");
        }
    
    }

    测试类

    package templatemethod;
    
    public class test {
    
        public static void main(String[] args) {
            AbstractDisplay ad = new CharDisplay("hello, world");
            ad.display();
        }
    
    }
  • 相关阅读:
    cxf简单实例
    生成素描图片
    Robotlegs2 学习笔记 -- SwiftSuspenders 2.x (2)
    Robotlegs2 学习笔记 -- SwiftSuspenders 2.x (1)
    Spring boot的put请求 (如何实现RestFul Api风格)
    net start npf启用失败
    vue项目中:‘vue-cli-service' 不是内部或外部命令,也不是可运行的程序或批处理文件的报错
    SpringBoot + Mybatis 打印sql语句修改配置文件的方式
    vue-cli最新脚手架的安装
    SpringBoot项目中设置日期返回的格式
  • 原文地址:https://www.cnblogs.com/ningheshutong/p/6592651.html
Copyright © 2020-2023  润新知