欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java面向?qū)ο笾畣卫O(shè)計模式詳解

 更新時間:2024年01月12日 10:40:19   作者:咕咕貓_  
這篇文章主要介紹了Java面向?qū)ο笾畣卫O(shè)計模式詳解,所謂類的單例設(shè)計模式,就是采取一定的方法保證在整個的軟件系統(tǒng)中,對某個類只能存在一個對象實例,并且該類只提供一個取得其對象實例的方法,需要的朋友可以參考下

一、什么是設(shè)計模式

1.靜態(tài)方法和屬性的經(jīng)典使用

2.設(shè)計模式是在大量的實踐中總結(jié)和理論化之后優(yōu)選的代碼結(jié)構(gòu)、編程風格、以及解決問題的思考方式。設(shè)計模式就像是經(jīng)典的棋譜,不同的棋局,我們用不同的棋譜,免去我們自己再思考和摸索。

二、什么是單例模式(單個的實例)

1.所謂類的單例設(shè)計模式,就是采取一定的方法保證在整個的軟件系統(tǒng)中,對某個類只能存在一個對象實例,并且該類只提供一個取得其對象實例的方法

2.單例模式有兩種:①餓漢式 ②懶漢式

步驟:

1.構(gòu)造器私有化

2.類的內(nèi)部創(chuàng)建對象

3.向外暴露一個靜態(tài)的公共方法

三、餓漢式和懶漢式區(qū)別

1.兩者最主要的區(qū)別在于創(chuàng)建對象的時機不同,餓漢式是在類加載時就創(chuàng)建了對象實例,而懶漢式是在使用時才會創(chuàng)建

2.餓漢式不存在線程安全問題,而懶漢式存在線程安全問題(后面學(xué)習線程會補充)

3.餓漢式存在浪費資源的可能。如果一個程序員一個對象實例都沒有去使用,那么餓漢式創(chuàng)建的對象實例就浪費了;懶漢式是使用時才會創(chuàng)建,所以不存在這個問題

4.在javaSE標準類中, java.lang.Runtime就是經(jīng)典的單例模式

餓漢式案例

package com.learn.single_;
import java.util.GregorianCalendar;
/**
 * 演示餓漢式的單例模式
 */
public class SingleTon01 {
    public static void main(String[] args) {
        //GirlFriend xh = new GirlFriend("小紅");
        //GirlFriend xb = new GirlFriend("小白");
        //通過方法可以獲取對象
        GirlFriend instance1 = GirlFriend.getInstance();
        System.out.println(instance1);
        GirlFriend instance2 = GirlFriend.getInstance();
        System.out.println(instance2);
        System.out.println(instance1 == instance2);//同一個對象
    }
}
//有一個類,GirlFriend
//只能有一個女朋友
class GirlFriend {
    private String name;
    //為了能夠在靜態(tài)方法中返回gf對象,需要將其修飾為static
    private static GirlFriend gf = new GirlFriend("小紅紅");
    //如何保障我們只能創(chuàng)建一個GirlFriend對象
    //步驟[單例模式—餓漢式]
    //1.將構(gòu)造器私有化(防止在類的外部直接創(chuàng)建對象)
    //2.在類的內(nèi)部直接創(chuàng)建對象(該對象是static)
    //3.為了使用,提供一個公共的static方法,返回gf對象
    private GirlFriend(String name) {
        this.name = name;
    }
    public static GirlFriend getInstance(){
        return gf;
    }
    @Override
    public String toString() {
        return "GirlFriend{" +
                "name='" + name + '\'' +
                '}';
    }
}

懶漢式案例

package com.learn.single_;
/**
 * 演示懶漢式的單例模式
 */
public class SingleTon02 {
    public static void main(String[] args) {
        //new Cat("大黃");
        //調(diào)用一個靜態(tài)屬性會讓類加載,但是靜態(tài)變量屬性并沒有創(chuàng)建對象,所以并不會調(diào)用構(gòu)造器
        System.out.println(Cat.n1);
        Cat instance1 = Cat.getInstance();
        System.out.println(instance1);
        //第二次去調(diào)getInstance時cat已經(jīng)不為空,不會再創(chuàng)建新的對象,會把上一次創(chuàng)建的對象返回
        Cat instance2 = Cat.getInstance();
        System.out.println(instance2);
        System.out.println(instance1 == instance2); //T
    }
}
//希望在程序運行中,只能創(chuàng)建一個cat對象
//使用單例模式
class Cat{
    private String name;
    public static int n1 = 999;
    public static Cat cat; //默認為null
    //步驟
    //1.仍然將構(gòu)造器私有化
    //2.定義一個static靜態(tài)變量屬性
    //3.提供一個public的static方法,可以返回一個cat對象
    //4.懶漢式,只有當用戶使用getInstance時才返回一個cat對象,后面再次調(diào)用時會返回上一次創(chuàng)建的cat對象
    //  從而保證單例
    private Cat(String name) {
        System.out.println("構(gòu)造器被調(diào)用...");
        this.name = name;
    }
    public static Cat getInstance(){
        if(cat == null){ //如果還沒有創(chuàng)建cat對象
            cat = new Cat("小可");
        }
        return cat;
    }
    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                '}';
    }
}

到此這篇關(guān)于Java面向?qū)ο笾畣卫O(shè)計模式詳解的文章就介紹到這了,更多相關(guān)Java單例設(shè)計模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 九個動畫組圖輪播總結(jié)全棧數(shù)據(jù)結(jié)構(gòu)數(shù)組鏈表

    九個動畫組圖輪播總結(jié)全棧數(shù)據(jù)結(jié)構(gòu)數(shù)組鏈表

    數(shù)據(jù)結(jié)構(gòu)和算法是密不可分的,兩者往往是相輔相成的存在,所以在學(xué)習數(shù)據(jù)結(jié)構(gòu)過程中,不免會遇到各種算法,數(shù)據(jù)結(jié)構(gòu)常用操作一般為:增刪改查。基本上所有的數(shù)據(jù)結(jié)構(gòu)都是圍繞這幾個操作進行展開,本文用九張動圖來闡述先進后出的數(shù)據(jù)結(jié)構(gòu)
    2021-08-08
  • Ribbon單獨使用,配置自動重試,實現(xiàn)負載均衡和高可用方式

    Ribbon單獨使用,配置自動重試,實現(xiàn)負載均衡和高可用方式

    這篇文章主要介紹了Ribbon單獨使用,配置自動重試,實現(xiàn)負載均衡和高可用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 關(guān)于maven使用過程中無法導(dǎo)入依賴的一些總結(jié)

    關(guān)于maven使用過程中無法導(dǎo)入依賴的一些總結(jié)

    這篇文章主要介紹了關(guān)于maven使用過程中無法導(dǎo)入依賴的一些總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Spring實現(xiàn)郵件發(fā)送功能

    Spring實現(xiàn)郵件發(fā)送功能

    這篇文章主要為大家詳細介紹了Spring實現(xiàn)郵件發(fā)送功能,簡單的發(fā)送郵件工具JavaMailSender使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Java 網(wǎng)絡(luò)爬蟲新手入門詳解

    Java 網(wǎng)絡(luò)爬蟲新手入門詳解

    這篇文章主要介紹了Java 網(wǎng)絡(luò)爬蟲新手入門詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2019-10-10
  • mybatis多層嵌套resultMap及返回自定義參數(shù)詳解

    mybatis多層嵌套resultMap及返回自定義參數(shù)詳解

    這篇文章主要介紹了mybatis多層嵌套resultMap及返回自定義參數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • java MD5加密實現(xiàn)代碼

    java MD5加密實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了java MD5加密實現(xiàn)過程,為大家分享了MD5加密代碼,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 詳細介紹Java中的各種鎖

    詳細介紹Java中的各種鎖

    不少同學(xué)開始慢慢接觸多線時候,對線程之間為了保障數(shù)據(jù)安全性,一致性有所了解,本文詳細解介紹java中的21種鎖 ,需要的朋友可以參考下
    2021-06-06
  • 帶你入門Java的泛型

    帶你入門Java的泛型

    這篇文章主要給大家介紹了關(guān)于Java中泛型使用的簡單方法,文中通過示例代碼介紹的非常詳細,對大家學(xué)習或者使用Java具有一定的參考學(xué)習價值,需要的朋友們下面來一起學(xué)習學(xué)習吧
    2021-07-07
  • 一文帶你掌握Java?SPI的原理和實踐

    一文帶你掌握Java?SPI的原理和實踐

    在Java中,我們經(jīng)常會提到面向接口編程,這樣減少了模塊之間的耦合,更加靈活,Java?SPI?(Service?Provider?Interface)就提供了這樣的機制,本文就來講講它的原理與具體使用吧
    2023-05-05

最新評論