導航:首頁 > 編程語言 > java單態模式

java單態模式

發布時間:2022-09-18 11:17:32

① 請教關於java的單態模式

從你的代碼來看只有調用getInstance()方法,才會運行System.out.println("here run init()"); 這一句吧。
就算是在properties.load(...)這一句時構造函數又載入了一次,也不會輸出"here run init()"這一句啊~
暈了~
=========================================================
編譯了下你這段代碼(稍微有點修改)
import java.util.*;

public class Test{
private static Test instance = null;
public static synchronized Test getInstance() {
if(instance==null){
System.out.println("here run init()");
instance = new Test();
}
return instance;
}

private Test() {
init();
}

private void init(){
Properties p = new Properties();
try{
p.load(Test.class.getResourceAsStream("/option.properties"));
//以下是取配置,設置初始化配置的代碼,此處略掉
}catch(Exception ioEx){
System.out.println("配置文件option.properties不存在");
}
}

public static void main(String[] args){
Test t1 = Test.getInstance();
Test t2 = Test.getInstance();
System.out.println(t1 == t2);
}
}
結果輸出:
here run init()
配置文件option.properties不存在
true
只有一次……沒什麼問題啊~
===============================================
我把文件創建了,又運行了一次,輸出:
here run init()
true
還是只有一次……沒什麼問題~
==============================================
對了
p.load(new FileInputStream("option.properties"));
這樣也可以
===============================================
我裝的 Java 6 Update 10
對了,你的電腦是雙核的嗎?
可能是雙核的原因
同步出現了問題
使對象初始化了兩次
我家的單核的……
以前在學校學線程那一塊的時候
就因為雙核的原因,有的例子老是出問題

② java的單態模式中用到了static。

1 可以用懶漢式單例:
class A{
private static A a=null;

private A(){

}

public synchronized static A getInstance(){
if(a == null){
a = new A();
}

return a;
}
}

2 既然是單例 所以操作的是同一對象 當然會干擾

③ java中常用的設計模式有哪些

1.單例模式(有的書上說叫單態模式其實都一樣)
該模式主要目的是使內存中保持1個對象
2.工廠模式
該模式主要功能是統一提供實例對象的引用。看下面的例子:
public class Factory{
public ClassesDao getClassesDao(){
ClassesDao cd = new ClassesDaoImpl();
return cd;
}
}
interface ClassesDao{
public String getClassesName();
}
class ClassesDaoImpl implements ClassesDao {
public String getClassesName(){
System.out.println("A班");
}
}
class test
{
public static void main(String[] args){
Factory f = new Factory();
f.getClassesDao().getClassesName();
}
}
這個是最簡單的例子了,就是通過工廠方法通過介面獲取對象的引用
3.建造模式
該模式其實就是說,一個對象的組成可能有很多其他的對象一起組成的,比如說,一個對象的實現非常復雜,有很多的屬性,而這些屬性又是其他對象的引用,可能這些對象的引用又包括很多的對象引用。封裝這些復雜性,就可以使用建造模式。
4.門面模式
這個模式個人感覺像是Service層的一個翻版。比如Dao我們定義了很多持久化方法,我們通過Service層將Dao的原子方法組成業務邏輯,再通過方法向上層提供服務。門面模式道理其實是一樣的。
5.策略模式
這個模式是將行為的抽象,即當有幾個類有相似的方法,將其中通用的部分都提取出來,從而使擴展更容易。

④ java 中的單態模式是什麼概念,有什麼具體的應用,據個例子謝謝了

單例模式就是永遠指定的是同一個對象!!!
給段代碼給你,自己多理解!!!

public class SingleClass {

int i = 0;

static SingleClass sc = new SingleClass();

private SingleClass() {
}

public void test() {
System.out.println("hello" + (++i));
}

public static void main(String[] args) {
SingleClass c1 = SingleClass.sc;
SingleClass c2 = SingleClass.sc;
c1.test();
c2.test();

}
}

⑤ java中單態模式或單例模式(Singleton)有什麼意義

你好!
存在某些類不需要實例化多次,也就是說
該類一般沒有非靜態的成員變數,只需要在系統運行時實例化一次就可以了,所以就存在單例模式
如有疑問,請追問。

⑥ java中單態模式或單例模式(Singleton)有什麼意義

8.單態模式或單例模式(Singleton)


態模式有什麼用呢?想一下Adobe Photoshop ,處理兩張圖,會啟動兩個photoshop嗎?多耗費內存呀! ( Consider
Adobe or oracle, process two images with two
adobes?),所以單態模式在公司編程是非常重要的。有很多場合都要求,對象只能存在一個,多了的話就太耗費資源。(馬克-to-win)

class Photoshop {
/* 通過調試發現寫成 static Photoshop photoshop或static Photoshop
photoshop=null;
是一樣的,開始時都為null,馬克-to-win,另外在調試時
可以寫上觀察Photoshop.photoshop的值,它是獨立於任何對象之外的,從程序開始運行的main方法時, 這個值就有了,
只不過為null罷了, 我們可以一直觀察
*/
static Photoshop photoshop;//這個值獨立於任何對象存在,實例化任何對象之前,這個成員就有可能有值。

static Photoshop getInstanceQixy() {
if (photoshop == null) {
photoshop = new Photoshop();
System.out.println("成功創建");
} else {
System.out.println("已經創建了該類的實例,不能再創建!");
}

return photoshop;
}

void drawImage() {
System.out.println("draw image using photoshop");
}
}

public class Test {
public static void main(String[] args) {
。。。。。。。。。。。。。。。。詳情網上找「馬克-to-win」,參考他的網站或他的網路空間:java第2章的內容

⑦ java 中的單態是怎麼實現的

支持一下一樓!呵呵。。可以!
還有一種方式是用同步實現!代碼:
public class Singleton {

private static Singleton instance;

private Singleton(){}//必須是私有。

public static Singleton getInstance() {
if instance == null
{
synchronized(Singleton.class)
{
instance = new Singleton() ;
}
}
return instance;//返回的永遠是同一個inst
}
}
其實是一樣的,但我還是覺得樓上的比較好,也比較常用。

⑧ java里,什麼是單態,什麼是多態

單態是一種設計模式,作用是保證在Java應用程序中,一個類Class只有一個實例存在。
多態嘛就是父類實例化不同的子類得到不同的結果,例如老虎和羊的父類是動物,老虎和羊都有一個方法就是吃,當分別用老虎和羊來實例化動物類並調用吃的方法時,一個是吃肉,一個是吃草,這種區別就是多態。

⑨ Java單例模式是什麼意思

  1. Java單例模式是確保某個類只有一個實例,而且自行實例化並向整個系統提供這個實例,在計算機系統中,線程池、緩存、日誌對象、對話框、列印機、顯卡的驅動程序對象常被設計成單例的模式;

  2. Java單例模式分三種:懶漢式單例、餓漢式單例、登記式單例。

⑩ 編寫一個JAVA類,要求實現類的單態設計模式

package org.jdbc.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

//單例模式
public class JdbcUtilsSing {
private String url="jdbc:mysql://localhost:3306/hehe";
private String user = "root";
private String password = "k517liyu";
private static JdbcUtilsSing instance ;
//私有構造函數,不能被外部創建實例
private JdbcUtilsSing() {

}

public static JdbcUtilsSing getInstance() {
//雙重檢查,保證只會創建一個實例
if(instance == null) {
//防止2個以上的請求並發訪問
synchronized (JdbcUtilsSing.class) {
//第一個請求創建實例後,保證後面拿到鎖的請求不在創建新的實例
if(instance == null) {
instance = new JdbcUtilsSing();
}
}

}
return instance;
}
//靜態代碼塊在類載入進內存的時候就自動執行
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError();
}
}

//獲得連接
public Connection getConnection() throws SQLException {
return DriverManager.getConnection(url,user,password);
}

//釋放資源
public void free(ResultSet rs,Statement st,Connection conn) {
try {
if(rs != null){rs.close();}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(st != null) {st.close();}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(conn != null) {conn.close();}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}

閱讀全文

與java單態模式相關的資料

熱點內容
什麼樣的app上買機票最便宜 瀏覽:987
安卓如何查看異常重啟 瀏覽:717
解壓音樂排名 瀏覽:385
安卓手機瀏覽器怎麼掃二維碼 瀏覽:720
通達信成本均線源碼 瀏覽:618
可以下載的解壓音頻 瀏覽:567
海賊王怎麼換伺服器 瀏覽:321
計算機上的共享文件夾映射 瀏覽:942
榮耀安裝包在文件夾哪裡 瀏覽:198
機票php源碼 瀏覽:235
linux共享mac 瀏覽:926
中國沒有國外的伺服器地址 瀏覽:761
為什麼退款伺服器連接錯誤 瀏覽:559
android簡訊存儲位置 瀏覽:977
unix網路編程卷4 瀏覽:808
找靚機app下單什麼時候發貨 瀏覽:413
android一個應用兩個進程 瀏覽:803
linux硬碟復制 瀏覽:808
php圖片伺服器搭建 瀏覽:801
下載壓縮文件怎麼打開 瀏覽:194