国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

java基礎(chǔ)之設(shè)計(jì)模式(單例模式,工廠模式)

這篇具有很好參考價(jià)值的文章主要介紹了java基礎(chǔ)之設(shè)計(jì)模式(單例模式,工廠模式)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

設(shè)計(jì)模式

是一種編碼套路

單例模式

一個(gè)類只能創(chuàng)建一個(gè)實(shí)例

餓漢式

直接創(chuàng)建唯一實(shí)例

package com.by.entity;
?
/**
 * 單例模式-餓漢式
 */
public class ClassA {
 ? ?//static: 1. newClassA可以訪問返回 2. 靜態(tài)屬性內(nèi)存中只會(huì)存在一個(gè)
 ? ?//private: 防止外界直接訪問屬性
 ? ?private static ClassA ca = new ClassA();
?
 ? ?//外界獲取唯一實(shí)例的渠道
 ? ?//static:使外界直接通過類名訪問
 ? ?public static ClassA newClassA(){
 ? ? ? ?return ca;
 ?  }
?
 ? ?//構(gòu)造私有化-防止外界調(diào)用構(gòu)造創(chuàng)建對(duì)象
 ? ?private ClassA(){
?
 ?  }
}

缺點(diǎn): 有可能浪費(fèi)空間

懶漢式

在獲取實(shí)例是創(chuàng)建唯一對(duì)象

package com.by.entity;
?
/**
 * 單例模式-懶漢式
 */
public class ClassB {
 ? ?//static: 1. newClassA可以訪問返回 2. 靜態(tài)屬性內(nèi)存中只會(huì)存在一個(gè)
 ? ?//private: 防止外界直接訪問屬性
 ? ?private static ClassB cb = null;
?
 ? ?//外界獲取唯一實(shí)例的渠道
 ? ?//static:使外界直接通過類名訪問
 ? ?//synchronized: 同步方法  預(yù)防線程安全問題
 ? ?public static synchronized ClassB newClassB(){
 ? ? ? ?
 ? ? ? ?if (cb == null) {//當(dāng)?shù)谝淮潍@取時(shí)再進(jìn)行實(shí)例化 
 ? ? ? ? ? ?cb = new ClassB();
 ? ? ?  }
 ? ? ? ?return cb;
 ?  }
?
 ? ?//構(gòu)造私有化-防止外界調(diào)用構(gòu)造創(chuàng)建對(duì)象
 ? ?private ClassB(){
?
 ?  }
?
}

缺點(diǎn): 線程效率慢

懶漢式-進(jìn)階版

在懶漢式的基礎(chǔ)上,利用同步代碼塊結(jié)合二次校驗(yàn)提高執(zhí)行效率

package com.by.entity;
?
/**
 * 單例模式-懶漢式進(jìn)階版
 */
public class ClassC {
 ? ?//static: 1. newClassA可以訪問返回 2. 靜態(tài)屬性內(nèi)存中只會(huì)存在一個(gè)
 ? ?//private: 防止外界直接訪問屬性
 ? ?private static ClassC cc = null;
?
 ? ?//外界獲取唯一實(shí)例的渠道
 ? ?//static:使外界直接通過類名訪問
 ? ?public static ClassC newClassC(){
 ? ? ? ?if (cc == null) {//二次校驗(yàn): 決定是否需要開啟互斥鎖 t1:true  t2:true
 ? ? ? ? ? ?synchronized (ClassC.class) {//臨界資源對(duì)象: 當(dāng)前類的類對(duì)象
 ? ? ? ? ? ? ? ?//對(duì)屬性進(jìn)行實(shí)例化
 ? ? ? ? ? ? ? ?if (cc == null) {//當(dāng)?shù)谝淮潍@取時(shí)再進(jìn)行實(shí)例化
 ? ? ? ? ? ? ? ? ? ?cc = new ClassC();
 ? ? ? ? ? ? ?  }
 ? ? ? ? ?  }
 ? ? ?  }
 ? ? ? ?return cc;
 ?  }
?
 ? ?//構(gòu)造私有化-防止外界調(diào)用構(gòu)造創(chuàng)建對(duì)象
 ? ?private ClassC(){
?
 ?  }
?
}package com.by.entity;
?
/**
 * 單例模式-懶漢式進(jìn)階版
 */
public class ClassC {
 ? ?//static: 1. newClassA可以訪問返回 2. 靜態(tài)屬性內(nèi)存中只會(huì)存在一個(gè)
 ? ?//private: 防止外界直接訪問屬性
 ? ?private static ClassC cc = null;
?
 ? ?//外界獲取唯一實(shí)例的渠道
 ? ?//static:使外界直接通過類名訪問
 ? ?public static ClassC newClassC(){
 ? ? ? ?if (cc == null) {//二次校驗(yàn): 決定是否需要開啟互斥鎖 t1:true  t2:true
 ? ? ? ? ? ?synchronized (ClassC.class) {//臨界資源對(duì)象: 當(dāng)前類的類對(duì)象
 ? ? ? ? ? ? ? ?//對(duì)屬性進(jìn)行實(shí)例化
 ? ? ? ? ? ? ? ?if (cc == null) {//當(dāng)?shù)谝淮潍@取時(shí)再進(jìn)行實(shí)例化
 ? ? ? ? ? ? ? ? ? ?cc = new ClassC();
 ? ? ? ? ? ? ?  }
 ? ? ? ? ?  }
 ? ? ?  }
 ? ? ? ?return cc;
 ?  }
?
 ? ?//構(gòu)造私有化-防止外界調(diào)用構(gòu)造創(chuàng)建對(duì)象
 ? ?private ClassC(){
?
 ?  }
?
}

工廠模式

  • 是一種底層技術(shù),通常用于底層框架的編寫

  • 思路: 將數(shù)據(jù)的創(chuàng)建和維護(hù)交由工廠完成

案例
  • 需求: 構(gòu)建一個(gè)工廠類,獲取學(xué)生對(duì)象

  1. 提供學(xué)生類

    package com.by.entity;
    ?
    public class Student {
     ? ?private String name;
     ? ?private int age;
     ? ?private double score;
    ?
     ? ?public String getName() {
     ? ? ? ?return name;
     ?  }
    ?
     ? ?public void setName(String name) {
     ? ? ? ?this.name = name;
     ?  }
    ?
     ? ?public int getAge() {
     ? ? ? ?return age;
     ?  }
    ?
     ? ?public void setAge(int age) {
     ? ? ? ?this.age = age;
     ?  }
    ?
     ? ?public double getScore() {
     ? ? ? ?return score;
     ?  }
    ?
     ? ?public void setScore(double score) {
     ? ? ? ?this.score = score;
     ?  }
    ?
     ? ?@Override
     ? ?public String toString() {
     ? ? ? ?return "Student{" +
     ? ? ? ? ? ? ? ?"name='" + name + '\'' +
     ? ? ? ? ? ? ? ?", age=" + age +
     ? ? ? ? ? ? ? ?", score=" + score +
     ? ? ? ? ? ? ? ?'}';
     ?  }
    ?
     ? ?public Student() {
     ?  }
    ?
     ? ?public Student(String name, int age, double score) {//string,int,double
     ? ? ? ?this.name = name;
     ? ? ? ?this.age = age;
     ? ? ? ?this.score = score;
     ?  }
    }
  2. 書寫配置文件

    • 在項(xiàng)目下創(chuàng)建后綴名為.properties的配置文件

    • 作用: 存放被管理類的全限定名

    • 鍵=值的形式存放數(shù)據(jù)

    • 鍵值不可添加雙引號(hào)、末尾不可添加分號(hào)、中間不可存在多個(gè)符號(hào)(如空格)

    • 一行只能有一個(gè)鍵值對(duì)

    StudentClassName=com.by.entity.Student
    
  3. 書寫工廠類

    package com.by.util;
    ?
    import com.by.entity.Student;
    ?
    import java.io.FileInputStream;
    import java.util.Properties;
    ?
    public class MyFactory {
     ? ?/**
     ? ? * 獲取學(xué)生對(duì)象
     ? ? */
     ? ?public static Student getStudent(){
     ? ? ? ?Student student = null;
     ? ? ? ?try (
     ? ? ? ? ? ? ? ?//創(chuàng)建輸入流
     ? ? ? ? ? ? ? ?FileInputStream fis=new FileInputStream("factory.properties")
     ? ? ? ? ? ? ?  ) {
     ? ? ? ? ? ?//將配置文件的內(nèi)容加載到集合中
     ? ? ? ? ? ?Properties p = new Properties();
     ? ? ? ? ? ?p.load(fis);
     ? ? ? ? ? ?//獲取全限定名
     ? ? ? ? ? ?String className = p.getProperty("StudentClassName");
     ? ? ? ? ? ?//獲取類對(duì)象
     ? ? ? ? ? ?Class c = Class.forName(className);
     ? ? ? ? ? ?//利用反射構(gòu)建學(xué)生實(shí)例
     ? ? ? ? ? ?student = (Student) c.newInstance();
     ? ? ?  } catch (Exception e) {
     ? ? ? ? ? ?System.out.println("未知異常!");
     ? ? ? ? ? ?e.printStackTrace();
     ? ? ?  }
     ? ? ? ?return student;
    ?
     ?  }
    }
    ?
  4. 測(cè)試文章來源地址http://www.zghlxwxcb.cn/news/detail-801679.html

    package com.by.test;
    ?
    import com.by.entity.Student;
    import com.by.util.MyFactory;
    ?
    public class Test5 {
     ? ?public static void main(String[] args) {
     ? ? ? ?//利用工廠獲取學(xué)生實(shí)例對(duì)象
     ? ? ? ?Student s1 = MyFactory.getStudent();
     ? ? ? ?Student s2 = MyFactory.getStudent();
    ?
     ?  }
    }
    ?

到了這里,關(guān)于java基礎(chǔ)之設(shè)計(jì)模式(單例模式,工廠模式)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 結(jié)構(gòu)型設(shè)計(jì)模式-單例模式/工廠模式/抽象工廠

    創(chuàng)建型設(shè)計(jì)模式-單例模式/工廠模式/抽象工廠 行為型設(shè)計(jì)模式:模板設(shè)計(jì)模式/觀察者設(shè)計(jì)模式/策略設(shè)計(jì)模式 C#反射機(jī)制實(shí)現(xiàn)開閉原則的簡(jiǎn)單工廠模式 設(shè)計(jì)模式可以分為三種類型: 創(chuàng)建型設(shè)計(jì)模式、結(jié)構(gòu)型設(shè)計(jì)模式和行為型設(shè)計(jì)模式 。 創(chuàng)建型設(shè)計(jì)模式:這些模式涉及到 對(duì)

    2024年02月11日
    瀏覽(24)
  • 設(shè)計(jì)模式(單例模式,工廠模式),線程池

    設(shè)計(jì)模式(單例模式,工廠模式),線程池

    目錄 什么是設(shè)計(jì)模式? 單例模式 餓漢模式 懶漢模式 工廠模式 線程池 線程池種類 ThreadPoolExcutor的構(gòu)造方法: 手動(dòng)實(shí)現(xiàn)一個(gè)線程池? 計(jì)算機(jī)行業(yè)程序員水平層次不齊,為了 讓所有人都能夠?qū)懗鲆?guī)范的代碼, 于是就有了設(shè)計(jì)模式, 針對(duì)一些典型的場(chǎng)景,給出一些典型的解決方案 單例

    2024年02月11日
    瀏覽(20)
  • 設(shè)計(jì)模式-創(chuàng)建型模式(單例、工廠、建造、原型)

    設(shè)計(jì)模式:軟件設(shè)計(jì)中普遍存在(反復(fù)出現(xiàn))的各種問題,所提出的解決方案。 面向?qū)ο笕筇匦裕悍庋b、繼承、多態(tài)。 面向?qū)ο笤O(shè)計(jì)的SOLID原則: (1)開放封閉原則:一個(gè)軟件實(shí)體如類、模塊和函數(shù)應(yīng)該對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。即軟件實(shí)體應(yīng)盡量在不修改原有代碼的情

    2024年02月08日
    瀏覽(28)
  • Python入門【?編輯、組合、設(shè)計(jì)模式_工廠模式實(shí)現(xiàn) 、設(shè)計(jì)模式_單例模式實(shí)現(xiàn)、工廠和單例模式結(jié)合、異常是什么?異常的解決思路 】(十七)

    Python入門【?編輯、組合、設(shè)計(jì)模式_工廠模式實(shí)現(xiàn) 、設(shè)計(jì)模式_單例模式實(shí)現(xiàn)、工廠和單例模式結(jié)合、異常是什么?異常的解決思路 】(十七)

    ??作者簡(jiǎn)介:大家好,我是愛敲代碼的小王,CSDN博客博主,Python小白 ??系列專欄:python入門到實(shí)戰(zhàn)、Python爬蟲開發(fā)、Python辦公自動(dòng)化、Python數(shù)據(jù)分析、Python前后端開發(fā) ??如果文章知識(shí)點(diǎn)有錯(cuò)誤的地方,請(qǐng)指正!和大家一起學(xué)習(xí),一起進(jìn)步?? ??如果感覺博主的文章還不錯(cuò)的

    2024年02月14日
    瀏覽(20)
  • Java 基礎(chǔ):設(shè)計(jì)模式之工廠方法模式

    工廠方法模式(Factory Method Pattern)是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一個(gè)創(chuàng)建對(duì)象的通用接口,但將實(shí)際創(chuàng)建邏輯推遲到子類中實(shí)現(xiàn)。這種模式允許客戶端使用抽象接口來創(chuàng)建特定類型的對(duì)象,而無需了解具體的實(shí)現(xiàn)細(xì)節(jié)。以下是工廠方法模式的詳細(xì)分析: 一. 定義與目的

    2024年04月29日
    瀏覽(26)
  • 【2023-05-09】 設(shè)計(jì)模式(單例,工廠)

    單例模式 顧名思義,就是整個(gè)系統(tǒng)對(duì)外提供的實(shí)例有且只有一個(gè) 特點(diǎn): ? 1、單例類只有一個(gè)實(shí)例 ? 2、必須是自己創(chuàng)建唯一實(shí)例 ? 3、必須給所以對(duì)象提供這個(gè)實(shí)例 分類:一般分為餓漢式單例(直接實(shí)例化)和懶漢式單例(使用時(shí)才實(shí)例化) 餓漢式單例 懶漢式單例 同步

    2024年02月03日
    瀏覽(22)
  • day39 注解 設(shè)計(jì)模式(單例模式和工廠模式)

    day39 注解 設(shè)計(jì)模式(單例模式和工廠模式)

    @Target? ? @Target(ElementType.TYPE) @Target({ ????????????????ElementType.TYPE,? ? ? ? ? ????????????????ElementType.METHOD}) //確定自定義的注解的使用范圍?type為類? method為方法? field為屬性 @Retention @Retention()? //(不添加參數(shù)默認(rèn)是class) @Retention(RetentionPolicy.CLASS)// 保留到

    2024年02月09日
    瀏覽(54)
  • 前端設(shè)計(jì)模式:工廠方法模式、單例模式、訂閱模式、中介者模式

    工廠方法模式是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一種將對(duì)象的創(chuàng)建與使用分離的方式。在工廠方法模式中,我們定義一個(gè)工廠接口,該接口聲明了一個(gè)用于創(chuàng)建對(duì)象的方法。具體的對(duì)象創(chuàng)建則由實(shí)現(xiàn)該接口的具體工廠類來完成。 工廠方法模式的核心思想是將對(duì)象的創(chuàng)建延遲到

    2024年02月12日
    瀏覽(91)
  • 設(shè)計(jì)模式(單例模式、工廠模式及適配器模式、裝飾器模式)

    設(shè)計(jì)模式(單例模式、工廠模式及適配器模式、裝飾器模式)

    目錄 0 、設(shè)計(jì)模式簡(jiǎn)介 一、單例模式 二、工廠模式 三、適配器模式 四、裝飾器模式? 設(shè)計(jì)模式可以分為以下三種:? 創(chuàng)建型模式: 用來描述 “如何創(chuàng)建對(duì)象” ,它的主要特點(diǎn)是 “將對(duì)象的創(chuàng)建和使用分離”。包括 單例 、原型、 工廠方法 、 抽象工廠 和建造者 5 種模式。

    2024年02月06日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包