一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 一篇文章帶你入門java模板模式

一篇文章帶你入門java模板模式

2021-11-11 11:03zsr6135 Java教程

這篇文章主要為大家詳細介紹了java模板模式的相關資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

Java設計模式-模板模式

什么是模板模式?

模板模式,顧名思義,就是通過模板拓印的方式。

定義模板,就是定義框架、結構、原型。定義一個我們共同遵守的約定。

定義模板,我們的剩余工作就是對其進行充實、豐潤,完善它的不足之處。

定義模板采用抽象類來定義,公共的結構化邏輯需要在抽象類中完成,只將非公共的部分邏輯抽象成抽象方法,留待子類充實實現。

下面首先通過一個簡單的程序來分析一下,例如:現在有三種類型:豬、機器人、人;

  • 豬具備三種功能:吃、睡、跑
  • 機器人又兩個功能:吃、工作
  • 人具備四個功能:吃、睡、跑、工作。

現在就要求設計一個程序,可以讓這三類不同的類型,進行工作。現在給出的三個類實際上并沒有任何聯系

UML圖:

一篇文章帶你入門java模板模式

源代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
abstract class Action{
    public static final int EAT = 1;
    public static final int SLEEP = 5;
    public static final int RUN = 20;
    public static final int WORK = 30;
    public abstract void eat();
    public abstract void sleep();
    public abstract void run();
    public abstract void work();
    public void order(int flag){
        switch(flag){
            case EAT:
                this.eat();
                break;
            case SLEEP:
                this.sleep();
                break;
            case RUN:
                this.run();
                break;
            case WORK:
                this.work();
                break;
            case EAT+WORK:
                this.eat();
                this.work();
                break;
            case EAT+WORK+RUN+SLEEP:
                this.eat();
                this.sleep();
                this.run();
                this.work();
                break;
            case EAT+RUN+SLEEP:
                this.eat();
                this.sleep();
                this.run();
                break;
        }
    }
}
class Person extends Action{
    public void eat(){
        System.out.print("人吃,");
    }
    public void sleep(){
        System.out.print("人睡,");
    }
    public void run(){
        System.out.print("人跑,");
    }
    public void work(){
        System.out.print("人工作,");
    }
}
class Pig extends Action{
    public void eat(){
        System.out.print("豬吃,");
    }
    public void sleep(){
        System.out.print("豬睡,");
    }
    public void run(){
        System.out.print("豬跑,");
    }
    public void work(){}
}
class Robet extends Action{
    public void eat(){
        System.out.print("機器人吃,");
    }
    public void sleep(){}
    public void run(){}
    public void work(){
        System.out.print("機器人工作,");
    }
}
public class MoBan{
    public static void main(String args[]){
    /* 
人吃,人睡,人跑,人工作,
豬吃,豬睡,豬跑,
機器人吃,機器人工作,
    */
        Action ren = new Person();
        ren.order(Action.EAT+Action.SLEEP+Action.RUN+Action.WORK);
        System.out.println();
        Action pig = new Pig();
        pig.order(Action.EAT+Action.SLEEP+Action.RUN);
        System.out.println();
        Action robet = new Robet();
        robet.order(Action.EAT+Action.WORK);
    }
}

實際上通過此程序的定義結構你可以清楚的發現一個問題:

  • 抽象類在實際的使用過程之中會定義一些固化的模式,它只能接受幾種特定的指令;但是每種指定的具體實現由子類負責完成,我們父類只是做了方法的約定。

總結:

抽象類雖然定義了子類必須做的事情,但是抽象類依然會存在有單繼承的局限

抽象類的使用必須通過子類進行實例化的獲取。

模板模式的關鍵點:

使用抽象類定義模板類,并在其中定義所有的基本方法、模板方法,鉤子方法,不限數量,以實現功能邏輯為主。其中基本方法使用final修飾,其中要調用基本方法和鉤子方法,基本方法和鉤子方法可以使用protected修飾,表明可被子類修改。

定義實現抽象類的子類,重寫其中的模板方法,甚至鉤子方法,完善具體的邏輯。

使用場景: 在多個子類中擁有相同的方法,而且邏輯相同時,可以將這些方法抽出來放到一個模板抽象類中。程序主框架相同,細節不同的情況下,也可以使用模板方法。

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關注服務器之家的更多內容!

原文鏈接:https://blog.csdn.net/zsr6135/article/details/119413603

延伸 · 閱讀

精彩推薦
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
主站蜘蛛池模板: 草逼吧| 青青青青久久国产片免费精品 | 欧美在线高清 | 99久久精品国产免费 | 国产精品久久国产精品99 | 蜜桃久久久亚洲精品成人 | 猫影视tv接口 | 韩国www | 香蕉eeww99国产在线观看 | 亚洲人成毛片线播放 | 日韩天堂网 | 青青在线观看 | 国产精品区一区二区免费 | 国产重口老太伦 | 日韩毛片大全免费高清 | 国内精品哆啪啪 | 国产福利专区精品视频 | 草草线在成年免费视频网站 | 九九精品视频一区二区三区 | 欧美又硬又粗又长又大 | 91精品综合久久久久久五月天 | 17岁韩国在线观看免费1 | 久久精品热99看 | 国产一区二区免费在线 | 青青国产精品 | 十大免费批日的软件 | 91资源站| 国产麻豆传媒在线观看 | 天天爽视频 | 欧美有码 | 92国产福利视频一区二区 | 欧美一区欧美二区 | 韩国久播影院理论片不卡影院 | 成人欧美一区二区三区 | 亚洲日本中文字幕在线2022 | 欧美一级特黄特色大片免费 | 欧美日韩专区国产精品 | 九九精品免视看国产成人 | 成人国产精品一区二区不卡 | girlfriend动漫在线播放 | 欧美特黄视频在线观看 |