最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java面向對象之單例設計模式詳解

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

一、什么是設計模式

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

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

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

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

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

步驟:

1.構造器私有化

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

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

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

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

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

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

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

餓漢式案例

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.將構造器私有化(防止在類的外部直接創(chuàng)建對象)
    //2.在類的內部直接創(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("大黃");
        //調用一個靜態(tài)屬性會讓類加載,但是靜態(tài)變量屬性并沒有創(chuàng)建對象,所以并不會調用構造器
        System.out.println(Cat.n1);
        Cat instance1 = Cat.getInstance();
        System.out.println(instance1);
        //第二次去調getInstance時cat已經不為空,不會再創(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.仍然將構造器私有化
    //2.定義一個static靜態(tài)變量屬性
    //3.提供一個public的static方法,可以返回一個cat對象
    //4.懶漢式,只有當用戶使用getInstance時才返回一個cat對象,后面再次調用時會返回上一次創(chuàng)建的cat對象
    //  從而保證單例
    private Cat(String name) {
        System.out.println("構造器被調用...");
        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 + '\'' +
                '}';
    }
}

到此這篇關于Java面向對象之單例設計模式詳解的文章就介紹到這了,更多相關Java單例設計模式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java中switch-case結構的使用方法舉例詳解

    Java中switch-case結構的使用方法舉例詳解

    這篇文章主要介紹了Java中switch-case結構使用的相關資料,switch-case結構是Java中處理多個分支條件的一種有效方式,它根據一個表達式的值來執(zhí)行不同的代碼塊,需要的朋友可以參考下
    2025-01-01
  • SpringAOP實現(xiàn)自定義接口權限控制

    SpringAOP實現(xiàn)自定義接口權限控制

    本文主要介紹了SpringAOP實現(xiàn)自定義接口權限控制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-11-11
  • SpringCloud添加客戶端Eureka Client過程解析

    SpringCloud添加客戶端Eureka Client過程解析

    這篇文章主要介紹了SpringCloud添加客戶端Eureka Client過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • 在Idea2020.1中使用gitee2020.1.0創(chuàng)建第一個代碼庫的實現(xiàn)

    在Idea2020.1中使用gitee2020.1.0創(chuàng)建第一個代碼庫的實現(xiàn)

    這篇文章主要介紹了在Idea2020.1中使用gitee2020.1.0創(chuàng)建第一個代碼庫的實現(xiàn),文中通過圖文示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 解決IDEA使用Spring Initializr創(chuàng)建項目時無法連接到https://start.spring.io的問題

    解決IDEA使用Spring Initializr創(chuàng)建項目時無法連接到https://start.spring.io的問

    這篇文章主要介紹了解決IDEA使用Spring Initializr創(chuàng)建項目時無法連接到https://start.spring.io的問題,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • SpringCloud使用spring-boot-devtools 進行熱部署的實現(xiàn)

    SpringCloud使用spring-boot-devtools 進行熱部署的實現(xiàn)

    本文主要介紹了Spring Cloud使用spring-boot-devtools進行熱部署,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-10-10
  • Springboot 如何使用@Async整合線程池

    Springboot 如何使用@Async整合線程池

    這篇文章主要介紹了Springboot 使用@Async整合線程池的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot整合MyBatis-Flex的保姆級教程

    SpringBoot整合MyBatis-Flex的保姆級教程

    MyBatis-Flex 是一個基于 MyBatis 的增強框架,它提供了比傳統(tǒng) MyBatis Plus 更加強大和靈活的功能特性,下面我們就來看看如何在SpringBoot中整合MyBatis-Flex吧
    2026-01-01
  • java shiro實現(xiàn)退出登陸清空緩存

    java shiro實現(xiàn)退出登陸清空緩存

    本篇文章主要介紹了java shiro實現(xiàn)退出登陸清空緩存,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • 關于Java垃圾回收開銷降低的幾條建議

    關于Java垃圾回收開銷降低的幾條建議

    垃圾回收(Garbage Collection)是Java虛擬機(JVM)垃圾回收器提供的一種用于在空閑時間不定時回收無任何對象引用的對象占據的內存空間的一種機制,下面這篇文章主要介紹了關于Java垃圾回收開銷降低的幾條建議,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02

最新評論

万安县| 昌江| 扶沟县| 清苑县| 济阳县| 永福县| 泸溪县| 县级市| 仙游县| 保定市| 双桥区| 黄冈市| 河间市| 荔波县| 蒙城县| 遂川县| 班戈县| 隆回县| 共和县| 封丘县| 宿松县| 萨迦县| 靖宇县| 惠东县| 即墨市| 龙里县| 中阳县| 偃师市| 固安县| 响水县| 咸宁市| 垫江县| 横山县| 临湘市| 衡山县| 乡城县| 德令哈市| 阳东县| 拉萨市| 乐东| 临猗县|