#### 模板設計模式
- 模板方法設計模式:
- 定義:編寫一個抽象父類,該父類提供了多個子類的通用方法,并把一個或多個抽象方法留給子類去實現,這就是模板設計模式;
解決的問題:當功能內部一部分實現時確定,一部分實現是不確定的。這時可以把不確定的部分暴露出去,讓子類去實現。
- 示例1
~~~
abstract class GetTime{
public final void getTime(){ //此功能如果不需要復寫,可加final限定
long start = System.currentTimeMillis();
code(); //不確定的功能部分,提取出來,通過抽象方法實現
long end = System.currentTimeMillis();
System.out.println("毫秒是:"+(end-start));
}
public abstract void code(); //抽象不確定的功能,讓子類復寫實現
}
class SubDemo extends GetTime{
public void code(){ //子類復寫功能方法
for(int y=0; y<1000; y++){
System.out.println("y");
}
}
}
~~~
- 模板模式應用的簡單規則:
1.抽象父類可以只定義需要使用的某些方法,其余留給子類去實現;
2.父類提供的方法只是定義了一個通用算法,其實現必須依賴子類的輔助;
- 如果父類的方法不想被子類覆寫,那么可以在前面加上final關鍵字修飾。
- 示例2
~~~
//抽象類中包含很多的抽象方法,子類必須去覆寫!
abstract class Method{
abstract double mul();//返回值類型如果是void的話,下面報錯,因為沒有返回值,無法引用!
abstract double divid();
void show(){
System.out.println("面積是:"+mul());//周長
System.out.println("面積是:"+divid());//面積
}
}
class Square extends Method{
double d;
public Square(double d) {
super();
this.d = d;
}
@Override
double mul() {
return d * d;
}
@Override
double divid() {
return 4 * d;
}
}
class Cirle extends Method{
double r;
public Cirle(double r) {
super();
this.r = r;
}
@Override
double mul() {
return 2 * 3.14 * r;
}
@Override
double divid() {
return 3.14 * r * r;
}
}
public class Demo16 {
public static void main(String[] args) {
Square s = new Square(5);
s.show();
Cirle c = new Cirle(4);
c.show();
}
}
~~~