1. 程式人生 > >單例模式和多例模式的總結

單例模式和多例模式的總結

今天開始學習設計模式之單例和多例

單例模式的關鍵有兩點:

1.構造方法為私有,這樣外界就不能隨意呼叫。

2.get的方法為靜態,由類直接呼叫

多例模式(Multiton)

1 、多例類可以有多個例項 
2 、多例類必須能夠自我建立並管理自己的例項,並向外界提供自己的例項。

一、單例模式和多例模式說明:

1.         單例模式和多例模式屬於物件模式。

2.         單例模式的物件在整個系統中只有一份,多例模式可以有多個例項。

3.         它們都不對外提供構造方法,即構造方法都為私有。

4.         單例模式和多例模式的結構圖如下所示:

    

單例多例模式

單例模式的三種形式:

第一種形式:懶漢式

public class SingletonClass{ private static SingletonClass instance=null; public staticsynchronized SingletonClass getInstance() { if(instance==null) { instance=new SingletonClass(); } return instance; } private SingletonClass(){ } } 第二種形式:餓漢式
//對第一行static的一些解釋 // java允許我們在一個類裡面定義靜態類。比如內部類(nested class)。
//把nested class封閉起來的類叫外部類。 //在java中,我們不能用static修飾頂級類(top level class)。 //只有內部類可以為static。 public class Singleton{ //在自己內部定義自己的一個例項,只供內部呼叫 private static final Singleton instance = new Singleton(); private Singleton(){ //do something } //這裡提供了一個供外部訪問本class的靜態方法,可以直接訪問 public static Singleton getInstance(){
return instance; } } 第三種形式: 雙重鎖的形式
public class Singleton{ private static Singleton instance=null; private Singleton(){ //do something } public static Singleton getInstance(){ if(instance==null){ synchronized(Singleton.class){ if(instance==null) {     instance=new Singleton(); } } } return instance; } }

二、應用舉例

1.         單例模式舉例:

package com.solid.pattern;

import java.util.Locale;

import java.util.ResourceBundle;

/**

 * 單例模式

 * @author solid

 *

 */

public class Singleton {

    private static Singleton singleton = new Singleton();

    private Singleton() {}

    public static Singleton getInstance() {

       return singleton;

    }

    /**

     * 獲取配置檔案的值

     * @param key

     */

    public void getMessage(String key) {

       Locale locale = new Locale(key);

       ResourceBundle res = ResourceBundle.getBundle("res_zh_CN");

       String message = res.getString(key);

       System.out.println(message);

    }

}

package com.solid.pattern;

/**

*單例模式測試

*@authorsolid

*

*/

publicclass TestSingleton {

privatestatic Singleton singleton;

publicstaticvoid main(String[] args) {

singleton = Singleton.getInstance();

singleton.getMessage("title");

    }

}

2.         多例模式舉例:

package com.solid.pattern;

/**

*多例模式

*@authorsolid

*

*/

publicclass Multiton {

privatestatic Multiton multi1 = new Multiton();

privatestatic Multiton multi2 = new Multiton();

private Multiton() {}

publicstatic Multiton getInstance(int key) {

if(key == 1) {

returnmulti1;

       } else {

returnmulti2;

       }

    }

/**

*獲取1—6之間的隨機數

*/

publicvoid getValue() {

int value = (int)(Math.random()*6+1);

       System.out.println(value);

    }

}

package com.solid.pattern;

/**

*多例模式測試

*@authorsolid

*

*/

publicclass TestMultiton {

privatestatic Multiton multi1;

privatestatic Multiton multi2;

publicstaticvoid main(String[] args) {

multi1 = Multiton.getInstance(1);

multi2 = Multiton.getInstance(2);

multi1.getValue();

multi2.getValue();

    }

}

 單例和多例的詳細描述

1. 什麼是單例多例:
所謂單例就是所有的請求都用一個物件來處理,比如我們常用的service和dao層的物件通常都是單例的,而多例則指每個請求用一個新的物件來處理,比如action; 
2. 如何產生單例多例:
    在通用的SSH中,單例在spring中是預設的,如果要產生多例,則在配置檔案的bean中新增scope="prototype"; 
3. 為什麼用單例多例:
    之所以用單例,是因為沒必要每個請求都新建一個物件,這樣子既浪費CPU又浪費記憶體;

相關推薦

模式模式總結

今天開始學習設計模式之單例和多例 單例模式的關鍵有兩點: 1.構造方法為私有,這樣外界就不能隨意呼叫。 2.get的方法為靜態,由類直接呼叫 多例模式(Multiton) 1 、多例類可以有多個例項 2 、多例類必須能夠自我建立並管理自己的例項,並向外界提供自己

模式模式的區別

單例多例需要搞明白兩個問題: 1. 什麼是單例多例; 2. 如何產生單例多例; 3. 為什麼要用單例多例 4. 什麼時候用單例,什麼時候用多例; 1. 什麼是單例、多例: 所謂單例就是所有的請求都用一個物件來處理,比如我們常用的service和dao

Java—設計模式(餓漢,懶漢設計模式

1.單例模式 定義:一個類只允許產生一個例項化物件。 a.物件如何產生? 通過類的構造方法 b.要想限制物件的產生? 通過構造方法限制,構造方法私有化,類外部無法產生例項化物件。 餓漢式單例:上來就new //餓漢式單例 class Singleton{

設計模式設計模式

設計模式 單例設計模式 餓漢式單例 懶漢式單例 多例設計模式 單例設計模式 JavaSE:工廠+代理+單例 定義:一個類只允許產生一

模式的區別

設計者模式-單例模式和多例的區別 單例模式的關鍵有兩點: 1、構造方法為私有,這樣外界就不能隨意呼叫。 2、get的方法為靜態,由類直接呼叫 多例模式(Multiton) 1 、多例類可以有多個例項 2 、多例類必須能夠自我建立並管理自己的例項,並向外界提供自己的例項。

Spring 的模式模式

在Spring中,Bean的scope屬性中存在著兩種模式既單例模式(singleton)和多例模式(prototype)。        singleton 單例模式: 物件在整個系統中只有一份,所有的請求都用一個物件來處理,如service和dao層的物件一般是單例的。 

Spring學習之路--模式模式

在Spring中,bean可以被定義為兩種模式:prototype(多例)和singleton(單例) singleton(單例):只有一個共享的例項存在,所有對這個bean的請求都會返回這個唯一的例項。 prototype(多例):對這個bean的每次請求都會建立一個新

Spring學習之路——模式模式

在Spring中,bean可以被定義為兩種模式:prototype(多例)和singleton(單例) singleton(單例):只有一個共享的例項存在,所有對這個bean的請求都會返回這個唯一的例項。 prototype(多例):對這個bean的每次請求都會建立一個新的b

前端的頁面模式頁面模式

align hide 所有 結合 ont ica location http tail 一、前言   前端部分的搭建,需要考慮使用哪種模式進行頁面之間的跳轉交互,   而項目內的頁面交互,不可避免的需要相互之間的數據共享。   這就引出了本篇博客的目的,一起來談談:項目前端

springmvc 開發中關於Controller 的情況情況

本案例情況:springmvc+html+url傳遞引數,url直接訪問一個controller來進行頁面分配 在開發的過程中,我們springmvc裡面的controller用的不少,但是需要注意併發的情況。比如我們在做一個介面,所需要的引數是通過url來傳

Spring系列之三:SpringBean的構造構造(Maven Idea)

在使用Spring的Ioc容器建立物件會使用到單例構造或多例構造;單例構造:整個程式只有一個物件多例構造:程式中有類例項的多個物件,物件之間互相獨立首先在Test包下面建立一個User類,原始碼如下;package com.lydetails.ssm.Test; public

頁面模式頁面模式的優缺點

重新 word pass 否則 頁面 文件 調整 end 腳本環境 1)多頁面模式(MPA Multi-page Application):     多頁面跳轉需要刷新所有資源,每個公共資源(js、css等)需選擇性重新加載     頁面跳轉:使用window.lo

你所不知道的模式線程並發在模式中的影響

影響 編程問題 rop key 是我 提升 註意 特性 是不是 單例對象(Singleton)是一種常用的設計模式。在Java應用中,單例對象能保證在一個JVM中,該對象只有一個實例存在。這樣的模式有幾個好處: 1、某些類創建比較頻繁,對於一些大型的對象,這是一筆很大的系

關於JAVA你必須知道的那些事(四):模式

好吧,今天一定要把面向物件的最後一個特性:多型,給說完。不過我們先來聊一聊設計模式,因為它很重要。 設計模式 官方的解釋是,設計模式是:一套被反覆使用,多數人知曉的,經過分類編目,程式碼設計經驗的總結。說人話就是:軟體開發人員在軟體開發過程中面臨的一般問題的解決方案。 常見的設計模式可以

再說說模式執行緒(靜態內部類實現)

靜態內部類: package thread.singleton; public class StaticInnerClassSingleton { private static class Singleton{ private static Singleton si

spring詳解的實驗,以及如何使用模式

原文:http://www.tuicool.com/articles/RzIvAj spring生成物件預設是單例的。通過scope屬性可以更改為多例。 <bean id="user" class="modle.User" scope="prototype"&

C# 執行緒執行緒下的模式的實現

該單例模式是執行緒不安全的,只能在單執行緒下執行,在多執行緒中如果被兩個執行緒同時呼叫Instance屬性時,此時兩個執行緒判斷 if (_instance==null)時都會返回true,就會建立兩個例項。public class Singleton{ /// <

當python,模式模式,一次初始化遇到一起

end light 答案 註意 找到 一次 turn 相關 表示 1.在python中,單例模式是很容易實現的,隨便翻翻網上的相關教程,就能夠找到很多答案。 比如這樣: class hello(object): def __new__(cls, *args, *

singleton模式prototype原型模式

開始學習spring開發了 概念解釋: singleton單例模式:在整個Spring IoC容器中,使用singleton定義的Bean將只有一個例項,該模式是spring預設的模式。 prototype原型模式:每次通過容器的getBean方法獲取prototype

Java設計模式, 模式,工廠模式,建造者模式觀察者模式

  1、單例模式            寫法:    懶漢式                 /**     * 懶漢模式     * 宣告一個靜態物件,並且在第一次呼叫getInstance 方法時進行初始化     * Created by Bill on 2017/12