任何做網(wǎng)站如何進(jìn)行網(wǎng)站性能優(yōu)化?
面試和看源碼。
談到設(shè)計(jì)模式:
1、解決了什么問(wèn)題?
2、怎么寫?
模板方法設(shè)計(jì)模式解決了什么問(wèn)題?
解決方法中存在重復(fù)代碼的問(wèn)題。
寫法:
1)定義一個(gè)抽象類:
2)在里面定義兩個(gè)方法:
1> 一個(gè)是模板方法,把相同的代碼放進(jìn)去;
2> 一個(gè)是抽象方法,具體實(shí)現(xiàn)交給子類完成;
People類:
package cn.ensource.d6_abstact_template;public abstract class People {// 設(shè)計(jì)模板方法設(shè)計(jì)模式// 1. 定義一個(gè)模板方法出來(lái)public void write() {System.out.println("====我的爸爸====");System.out.println("我的爸爸好牛啊~");
// System.out.println("我的爸爸特別牛,開(kāi)車都不開(kāi)紅綠燈!");// 模板方法其實(shí)也不清楚正文部分到底應(yīng)該是怎么寫?但是它知道子類必須寫的。System.out.println(writeMain());System.out.println("有這樣的爸爸太好了!");}// 3. 設(shè)計(jì)一個(gè)抽象方法,具體的實(shí)現(xiàn)交給子類來(lái)完成public abstract String writeMain();
}
Teacher類:
package cn.ensource.d6_abstact_template;public class Teacher extends People {@Overridepublic String writeMain() {return "我的爸爸特別牛,讓我站在這里別走,他去買個(gè)橘子!";}
}
Student類:
package cn.ensource.d6_abstact_template;public class Teacher extends People {@Overridepublic String writeMain() {return "我的爸爸特別牛,讓我站在這里別走,他去買個(gè)橘子!";}
}
測(cè)試類:
package cn.ensource.d6_abstact_template;public class Test {public static void main(String[] args) {// 目標(biāo):搞清楚抽象類的應(yīng)用場(chǎng)景,設(shè)計(jì)模板方法模式// 場(chǎng)景:學(xué)生和老師都要寫一篇作文:我的爸爸// 第一段是一樣的// 正文部分自由發(fā)揮// 最后一段也是一樣的Teacher t = new Teacher();t.write();Student s = new Student();s.write();}
}
多學(xué)一招:
建議使用final關(guān)鍵字修飾模板方法,為什么?
模板方法,禁止子類再去方法重寫,防止失效。
模板方法設(shè)計(jì)模式解決了什么問(wèn)題?
解決了方法中存在重復(fù)代碼的問(wèn)題。
模板方法設(shè)計(jì)模式應(yīng)該怎么寫?
定義一個(gè)抽象類;
在里面定義2個(gè)方法,一個(gè)是模板方法,放相同的代碼,一個(gè)是抽象方法:具體實(shí)現(xiàn)交給子類完成。
模板方法建議使用什么關(guān)鍵字修飾?為什么?
final,不再讓子類方法重寫@override。