第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Template Method 模板設(shè)計(jì)模式

標(biāo)簽:
深度學(xué)習(xí)

Template Method 模板设计模式

文章地址:国威同学---原文地址

什么是模板设计模式

对于不了解的模板设计模式的来说,可以认为如同古代的造纸术一样,纸所以成型,取决于用了模板的形状,形状又由镂空的木板组成,而你想要造什么纸,又取决于你使用什么材料. 上面提到了两个关键点 <<模板>> <<材料>>

定义:

如同我们在父类中定义处理流程的框架,而在子类中实现具体处理的模板称之为template method 模板设计模式

具体到面向对象

  • <<模板>> 在对象中我们描述为 抽象类: 定义过程pdl

  • <<材料>> 在对象中我们描述为 具体行为的子类:

UML 代码

https://img1.sycdn.imooc.com//5ae47e25000149e106410585.jpg

  • AbstractDisplay: 定义模板框架,以及具体的过程,此处定义为 打印5吃字符

  • CharDisplay: 子类具体的实现 怎么去打印.

  • StringDisplay: 同上

    这里要说明一下,子类应该与父类进行协作开发,因为子类具体去做什么不能随意去写,应该根据父类具体的处理流程去定义相应的处理过程,当然可以把文档写清楚,

  • AbstractDisplay

package base.template;/**
 * @program: DesignPatterns
 * @description: 只实现display方法抽象类
 * @author: Mr.Dai
 * @create: 2018-04-28 16:12
 **/public abstract class AbstractDisplay {      public abstract void open();      public abstract void print();      public abstract void close();    /**
     * 实现打印5次的方法
     */
    public void  display() {
        open();        for (int i = 0; i < 5; i++) {
            print();
        }
        close();
    }
}
  • CharDisplay

package base.template;/**
 * @program: DesignPatterns
 * @description: 实现单个字符的打印
 * @author: Mr.Dai
 * @create: 2018-04-28 16:15
 **/public class CharDisplay extends AbstractDisplay {    private Character ch;    public CharDisplay(char ch) {        this.ch=ch;
    }    @Override
    public void open() {
        System.out.print("<<<");
    }    @Override
    public void print() {
        System.out.print(ch);
    }    @Override
    public void close() {
        System.out.println(">>>");
    }    @Override
    public void display() {        super.display();
    }
}
  • StringDisplay

package base.template;/**
 * @program: DesignPatterns
 * @description: 实现对个字符串打印
 * @author: Mr.Dai
 * @create: 2018-04-28 16:18
 **/public class StringDisplay extends AbstractDisplay {    private String string;    private int width;    public StringDisplay(String string) {        this.string = string;        this.width = string.getBytes().length;
    }

    @Override    public void open() {
        printline();
    }    private void printline() {
        System.out.print("+");        for (int i = 0; i < width; i++) {
            System.out.print("-");
        }
        System.out.println("+");
    }
    @Override    public void print() {
        System.out.println("|"+string+"|");
    }

    @Override    public void close() {
        printline();
    }

    @Override    public void display() {
        super.display();
    }
}

转移提高

  • 在java.io.inputstream 使用模板的方法,如下图UML
    https://img1.sycdn.imooc.com//5ae47e580001c08305260489.jpg

  • 限于多态的概念,chardisplay stringdisplay 的具体实例都是向上指向的abstractdisplay中的. 无需通过instanceof 制定的具体的子类

  • 由于是通过继承实现 所以遵循的LSP

  • 在子类与父类的协作过程中,必须保证代码量与方法数安排合理, 更多的方法实现放在父类会让子类变得轻松,但是也降低了子类的灵活性.如果父类中实现的方法过少,而且还会导致子类间代码重复出现.

  • 在abstractdisplay 不使用接口而使用抽象类的原因是 需要在定义模板过程的时候 确定相应的算法过程.

相关设计模式

  • Factory Method: 工厂模式 是将template method 模式用于生成实例的一个典型方法

  • Strategy:策略模式 可以使用委托改变的程序的行为,与template method 模式改变部分行为不同的是,他可以作为替换整个算法.

需要掌握的职责

  • 子类角度

  • 在子类中可以使用父类定义的方法

  • 可以在子类增加方法实现新的功能

  • 子类重写父类的方法可以改变父类的行为 一般情况下在定义父类模板的时候 确定是否使用final

  • 父类角度

  • 期待子类实现抽象方法.

  • 要求子类去实现抽象方法.


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消