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

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

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

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

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

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

二、什么是單例模式(單個(gè)的實(shí)例)

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

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

步驟:

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

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

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

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

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

2.餓漢式不存在線程安全問(wèn)題,而懶漢式存在線程安全問(wèn)題(后面學(xué)習(xí)線程會(huì)補(bǔ)充)

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

4.在javaSE標(biāo)準(zhǔn)類(lèi)中, 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("小白");
        //通過(guò)方法可以獲取對(duì)象
        GirlFriend instance1 = GirlFriend.getInstance();
        System.out.println(instance1);
        GirlFriend instance2 = GirlFriend.getInstance();
        System.out.println(instance2);
        System.out.println(instance1 == instance2);//同一個(gè)對(duì)象
    }
}
//有一個(gè)類(lèi),GirlFriend
//只能有一個(gè)女朋友
class GirlFriend {
    private String name;
    //為了能夠在靜態(tài)方法中返回gf對(duì)象,需要將其修飾為static
    private static GirlFriend gf = new GirlFriend("小紅紅");
    //如何保障我們只能創(chuàng)建一個(gè)GirlFriend對(duì)象
    //步驟[單例模式—餓漢式]
    //1.將構(gòu)造器私有化(防止在類(lèi)的外部直接創(chuàng)建對(duì)象)
    //2.在類(lèi)的內(nèi)部直接創(chuàng)建對(duì)象(該對(duì)象是static)
    //3.為了使用,提供一個(gè)公共的static方法,返回gf對(duì)象
    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)用一個(gè)靜態(tài)屬性會(huì)讓類(lèi)加載,但是靜態(tài)變量屬性并沒(méi)有創(chuàng)建對(duì)象,所以并不會(huì)調(diào)用構(gòu)造器
        System.out.println(Cat.n1);
        Cat instance1 = Cat.getInstance();
        System.out.println(instance1);
        //第二次去調(diào)getInstance時(shí)cat已經(jīng)不為空,不會(huì)再創(chuàng)建新的對(duì)象,會(huì)把上一次創(chuàng)建的對(duì)象返回
        Cat instance2 = Cat.getInstance();
        System.out.println(instance2);
        System.out.println(instance1 == instance2); //T
    }
}
//希望在程序運(yùn)行中,只能創(chuàng)建一個(gè)cat對(duì)象
//使用單例模式
class Cat{
    private String name;
    public static int n1 = 999;
    public static Cat cat; //默認(rèn)為null
    //步驟
    //1.仍然將構(gòu)造器私有化
    //2.定義一個(gè)static靜態(tài)變量屬性
    //3.提供一個(gè)public的static方法,可以返回一個(gè)cat對(duì)象
    //4.懶漢式,只有當(dāng)用戶使用getInstance時(shí)才返回一個(gè)cat對(duì)象,后面再次調(diào)用時(shí)會(huì)返回上一次創(chuàng)建的cat對(duì)象
    //  從而保證單例
    private Cat(String name) {
        System.out.println("構(gòu)造器被調(diào)用...");
        this.name = name;
    }
    public static Cat getInstance(){
        if(cat == null){ //如果還沒(méi)有創(chuàng)建cat對(duì)象
            cat = new Cat("小可");
        }
        return cat;
    }
    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                '}';
    }
}

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

相關(guān)文章

  • Java中switch-case結(jié)構(gòu)的使用方法舉例詳解

    Java中switch-case結(jié)構(gòu)的使用方法舉例詳解

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

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

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

    SpringCloud添加客戶端Eureka Client過(guò)程解析

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

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

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

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

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

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

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

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

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

    SpringBoot整合MyBatis-Flex的保姆級(jí)教程

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

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

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

    關(guān)于Java垃圾回收開(kāi)銷(xiāo)降低的幾條建議

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

最新評(píng)論

安康市| 通海县| 常山县| 桐柏县| 游戏| 巨野县| 望都县| 兴安县| 高陵县| 郎溪县| 盐源县| 福海县| 元氏县| 屏边| 肥西县| 桓台县| 枝江市| 射洪县| 阳曲县| 金华市| 余姚市| 巨野县| 闵行区| 故城县| 土默特右旗| 南部县| 云和县| 都兰县| 乃东县| 资阳市| 淮安市| 新源县| 灵武市| 桦南县| 赤城县| 遂昌县| 麻江县| 大安市| 堆龙德庆县| 鸡西市| 慈利县|