java基礎(chǔ)8&實戰(zhàn)開發(fā)Day5/單例設(shè)計模式和模板設(shè)計模式(抽象類)/2020-05-02

目錄

1.單例設(shè)計模式
2.抽象類Abstract模板設(shè)計模式
3.抽象類實現(xiàn)造房子

1.單例設(shè)計模式

簡介:
單例模式(Singleton Pattern)是 Java 中最簡單的設(shè)計模式之一。這種類型的設(shè)計模式屬于創(chuàng)建型模式频祝,它提供了一種創(chuàng)建對象的最佳方式泌参。
這種模式涉及到一個單一的類,該類負(fù)責(zé)創(chuàng)建自己的對象常空,同時確保只有單個對象被創(chuàng)建沽一。這個類提供了一種訪問其唯一的對象的方式,可以直接訪問漓糙,不需要實例化該類的對象铣缠。
特點:
1.私有化所有構(gòu)造方法,不讓外部自己去創(chuàng)建對象;
2.給外部提供一個方法(必須是靜態(tài)方法)獲取當(dāng)前類的一個對象;
3.必須定義一個靜態(tài)成員變量來保存當(dāng)前類唯一的一個對象;
4.創(chuàng)建對象:

  • 餓漢式:在定義靜態(tài)成員變量時,直接創(chuàng)建當(dāng)前類的一個對象,進(jìn)行賦值
  • 懶漢式:默認(rèn)不創(chuàng)建攘残,當(dāng)調(diào)用的時候才會創(chuàng)建

下面演示一下餓漢式和懶漢式兩種不同的創(chuàng)建方法
a.餓漢式

    //餓漢式
    private static HttpOperation instance = new HttpOperation();

b.懶漢式

    //懶漢式
    public static HttpOperation getInstane(){
        //判斷對象是否有值
        if (instance == null){
            //加鎖保證輸入正確
            synchronized (HttpOperation.class){
                if (instance == null){
                    //創(chuàng)建一個對象
                    instance = new HttpOperation();
                }
            }
        }
        return instance;
    }

2.抽象類Abstract模板設(shè)計模式

模板里面定義執(zhí)行的過程(有些功能自己可以實現(xiàn) 有些必須子類實現(xiàn))

  1. 抽象類使用abstract修飾

  2. 抽象類不能被實例化

3.抽象類里面可以定義成員變量|方法

  • 抽象方法必須使用abstract修飾
  • 而且不能被實現(xiàn)拙友,只能在子類中實現(xiàn)

4.子類繼承于抽象類

  • 子類實現(xiàn)抽象類里面的抽象方法
  • 如果不想實現(xiàn),可以將自己也變成抽象類

這里我們做了一個小Demo來演示一下抽象類Abstract模板設(shè)計模式:
Step1.首先創(chuàng)建一個抽象類模板Activity

public abstract class Activity {
    private String className;

    public Activity(){
        //子類必須實現(xiàn)的方法
        onCreate();

        //可以選擇實現(xiàn)的方法
        onStart();
        onResume();
        onPause();
        onStop();
        onDestroy();
    }

    //界面布局
    public abstract void onCreate();
    //開始啟動
    public void onStart(){

    }
    //界面顯示出來了 可以交互了
    public void onResume(){

    }
    //暫停
    public void onPause(){

    }
    //已經(jīng)停止
    public void onStop(){

    }
    //銷毀
    public void onDestroy(){

    }
    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }
}

可以看到:在父類方法中歼郭,我們把onCreate方法定義為抽象類遗契,則子類里面就必須要有這個方法,其他方法隨意使用
Step2.創(chuàng)建子類MainActivity并繼承父類Activity

public class MainActivity extends Activity {
    //抽象方法必須實現(xiàn)
    @Override
    public void onCreate() {
        System.out.println("創(chuàng)建首頁的界面");
    }

    //子類可以重寫父類的方法
    @Override
    public void onResume() {
        System.out.println("界面啟動了病曾,開始交互");
    }
}

可以看到:父類中抽象方法必須實現(xiàn)牍蜂,其他方法可供重寫
Step3.在主程序MyClass中創(chuàng)建子類MainActivity的對象mActivity,實現(xiàn)MainActivity()方法

public void activity(){
        //創(chuàng)建一個抽象類
        MainActivity mActivity = new MainActivity();
    }

打印結(jié)果:創(chuàng)建首頁的界面
         界面啟動了泰涂,開始交互

3.抽象類實現(xiàn)造房子

抽象類和普通類的區(qū)別:
抽象類不能實例化鲫竞,普通類可以
抽象類里面可以有抽象方法(只申明 不實現(xiàn)),普通類不行

這里我們單獨做一個Demo來加深對抽象類模板的理解:


Step1.造房子首先需要圖紙逼蒙,定義一個DrawMap類作為抽象類模板从绘,并定義三個抽象類方法供子類使用(方法 顏色 材料)

public abstract class DrawMap {
    public void buildHouse(){
        //造什么方法
        String type = getHouseType();
        //選擇顏色
        String color = getHouseColor();
        //材料
        String material = getMaterial();

        System.out.println("即將使用" + material + "造一個" + color + "的" + type);
    }

    public abstract String getHouseType();
    public abstract String getHouseColor();
    public abstract String getMaterial();
}

Step2.定義一個子類Worker,并實現(xiàn)抽象類方法

public class Worker extends DrawMap{
    @Override
    public String getHouseType() {
        return "鄉(xiāng)村小別墅";
    }

    @Override
    public String getHouseColor() {
        return "五顏六色";
    }

    @Override
    public String getMaterial() {
        return "鋼筋水泥";
    }
}

Step3.最后我們在主程序MyClass中創(chuàng)建子類Worker的一個對象xw是牢,實現(xiàn)父類方法build()

public static void main(String[] args) {
        Worker xw = new Worker();
        xw.buildHouse();
    }

打印結(jié)果:即將使用鋼筋水泥造一個五顏六色的鄉(xiāng)村小別墅

總結(jié)

1.單例設(shè)計模式全程最多涉及一個對象的創(chuàng)建和銷毀僵井,對性能和內(nèi)存影響小,不容易出現(xiàn)錯誤驳棱;
2.抽象類Abstract模板設(shè)計模式可以為子類提供一個公用的模板批什,可以隨意創(chuàng)建對象并使用抽象方法,體現(xiàn)了代碼的簡介性社搅。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末驻债,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子形葬,更是在濱河造成了極大的恐慌合呐,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笙以,死亡現(xiàn)場離奇詭異合砂,居然都是意外死亡,警方通過查閱死者的電腦和手機源织,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門翩伪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谈息,你說我怎么就攤上這事缘屹。” “怎么了侠仇?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵轻姿,是天一觀的道長犁珠。 經(jīng)常有香客問我,道長互亮,這世上最難降的妖魔是什么犁享? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮豹休,結(jié)果婚禮上炊昆,老公的妹妹穿的比我還像新娘。我一直安慰自己威根,他們只是感情好凤巨,可當(dāng)我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著洛搀,像睡著了一般敢茁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上留美,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天彰檬,我揣著相機與錄音,去河邊找鬼谎砾。 笑死逢倍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的棺榔。 我是一名探鬼主播瓶堕,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼隘道,長吁一口氣:“原來是場噩夢啊……” “哼症歇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谭梗,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤忘晤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后激捏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體设塔,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年远舅,在試婚紗的時候發(fā)現(xiàn)自己被綠了闰蛔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡图柏,死狀恐怖序六,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蚤吹,我是刑警寧澤例诀,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布随抠,位于F島的核電站,受9級特大地震影響繁涂,放射性物質(zhì)發(fā)生泄漏拱她。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一扔罪、第九天 我趴在偏房一處隱蔽的房頂上張望秉沼。 院中可真熱鬧,春花似錦步势、人聲如沸氧猬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盅抚。三九已至,卻和暖如春倔矾,著一層夾襖步出監(jiān)牢的瞬間妄均,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工哪自, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留丰包,地道東北人。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓壤巷,卻偏偏與公主長得像邑彪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子胧华,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,652評論 2 354