1. 程式人生 > >對工廠模式與單例模式的理解

對工廠模式與單例模式的理解

正式學java也那麼久了,今天就來梳理一下java的工廠模式(據說這是java23例模式中最簡單的一種模式)

所謂的工廠模式大概就是通過一個介面實現對子類的呼叫,當初我接觸工廠模式的時候,還沒意識到原來這就是工廠模式,

當時老師是據了一個抽獎系統的例子,大概是這樣,先寫一個介面,再寫好N個獎品類,譬如說Car類,讓這些類繼承這個介面,實現接口裡的方法,在寫一個類,這個類能夠處理傳過來的獎品類,那麼問題就是一個類怎麼實現通過一個建構函式接受這麼多的獎品類呢?顯然,通過對獎品的向上轉型,用最開始寫好的介面接收寫好的獎品類,再用這個介面直接呼叫獎品類實現的接口裡的方法,這樣就達到了降低耦合的效果,每當我們需要加類的時候,我們不需要重構整個系統的程式碼, 只需要增加類就好了,然後在關鍵位置上加上實現的程式碼。我當時接觸的例子大概就是這樣。

那麼,真正的工廠類是什麼樣子的呢?

接下來,我以一個學面向物件入門時的例子Shape類來寫一下,這個工廠模式。

//由於沒有使用CSDN 提供的MarkDown編輯器,這裡程式碼可能有點難看,暫時將就一下

先建一個介面Shape,並儲存為Shap.java

public interface Shape{

public void showShape();

}

在寫幾個形狀類Rectangle Square Circle 等,以下就以Circle為例

public class Circle implements Shape{

public void showShape(){

System.out.println("My shape : Circle");

}

}

最後就是這個工廠類了

public class ShapeFactory{

String  shape;

public ShapeFactory(String shape){

this.shape=shape;

}

public Shape getShape(){

if(this.shape.equals("rectangle")){

return new Circle();

}else if(this.shape.equals("square")){

return new Square();

}else if(this.shape.equals("circle")){

return new Circle();

}else{

return null;

}

}

}

最後就是客戶端的實現程式碼:

以下儲存為Main.java

public class Main{

public static void main(String [] args){

Shape circle = new Shape("circle").getShape();

Shape square = new Shape("square").getShape();

Shape rectangle =  new shape("rectangle").getShape();

//通過上述程式碼就能夠實現通過工廠模式實現物件的例項化

//這就是比較規範的工廠模式

}

}

下面我再來寫寫單例模式,

我們知道有些類是不能被例項化的,比如說Math類,要使用它的話,直接 用 Math.  來訪問它的方法就 ok了

那麼單例模式也與此有異曲同工之妙,

寫一個單例模式的SingTestItem類

public class SingTestItem{

public static SingTestItem single=new SingTestItem() ;//例項化一個靜態的本類物件,注意,是靜態的例項

private SingTestItem(){}//關鍵是這一步,把構造方法設定許可權為私有,這樣外部就不能通過構造方法來例項化物件了

public static SingTestItem getInstace(){//通過呼叫這個方法就能夠放回一個物件,這個方法也應該是靜態的,才能實現全域性只有一個例項

return single;

}


單例的意義在於:目前只能淺顯地理解,

比如說,一個國家只能有一個主席或者說總統

相關推薦

工廠模式模式理解

正式學java也那麼久了,今天就來梳理一下java的工廠模式(據說這是java23例模式中最簡單的一種模式) 所謂的工廠模式大概就是通過一個介面實現對子類的呼叫,當初我接觸工廠模式的時候,還沒意識到原來這就是工廠模式, 當時老師是據了一個抽獎系統的例子,大概是這樣,先寫一個

php面向物件(工廠模式模式

今天剛學習了php的設計模式,一個是工廠模式而另一個是單例模式,工廠模式設計出來就是為了一種方便建立物件而做出來的。還有一個是單例模式,單例模式的設計有些比較難以理解,我們必須一步一步的分析:單例類的情況必須去建立類的例項,而且必須只有一個,首先沒有物件例項的情況就是將它的

享元模式模式區別

單例模式是類級別的,一個類只能有一個物件例項; 享元模式是物件級別的,可以有多個物件例項,多個變數引用同一個物件例項; 享元模式主要是為了節約記憶體空間,提高系統性能,而單例模式主要為了可以共享資料;

[設計模式] 多模式模式區別

多例模式與單例模式都禁止外界直接將之例項化,同時通過靜態工廠方法向外界提供迴圈使用的自身的例項。它們的不同在於單例模式僅有一個例項,而多例模式則可以有多個例項。 多例模式往往具有一個聚集屬性,通過向這個聚集屬性登記已經建立過的例項達到迴圈使用例項的目的。一般而言,一個典型的

自己設計模式理解工廠模式模式

一、工廠模式:個人總結class  Factory {static function createObject($par){if ($par == 1) {$test1 = new Object1();} elseif ($par == 2) {$test2 = new O

【設計模式模式理解場景舉例

數據 好處 ask 配置管理 關鍵詞 簡潔 多次 nag 序列 軟件設計常用的一種設計模式 —— 單例模式 體現:在應用這個模式時,單例對象的類必須保證只有一個實例存在。 好處:許多時候整個系統只需要擁有一個全局的對象,這樣有利於我們協調整個系統的行為。 場景舉例 1.服務

設計模式模式工廠模式的Python實現(一)

1. 單例模式 單例模式(Singleton Pattern)是一種常用的軟體設計模式,該模式的主要目的是確保某一個類只有一個例項存在。當你希望在整個系統中,某個類只能出現一個例項時,單例物件就能派上用場。 比如,某個伺服器程式的配置資訊存放在一個檔案中,客戶端通過一個 AppConfig 的類來讀取配置檔案

Java中基於靜態變數模式快取的簡單實現

●What & Why 快取是什麼?他有什麼好處?相信不用說大家都知道。 目前筆者在做一個Java開發的Web專案,專案啟動的時候需要將大量不變的平臺數據放入快取中,方便快速讀取。一開始筆者很疑惑,Java是不能直接操作記憶體的,但是我們快取卻是要把資料放入記憶體

關鍵字static模式的一點理解

static是java語言中的一個關鍵字,表示一個靜態修飾符,修飾符比較容易理解,靜態修飾符又有什麼特點呢,首先程式中的任何變數或者程式碼都是在編譯時,由系統自動分配記憶體來儲存的,而靜態的特點就是指,在編譯後所分配的記憶體會一直存在,直到程式退出是才會釋放這個

設計模式模式工廠模式

單例模式 概念 單例模式是一種常見的“設計模式”! 什麼是設計模式? 所謂的設計模式,並不是一種新的語法,而是人們在實際的應用中面對某種特定的情形而設計出來的某種常見的有效的解決方案,只是經驗的總結! 單例就是單一的例項! 如果我們能通過某些技巧從語法上使得一個類只能開闢一

關於設計模式模式工廠模式、代理模式、介面卡模式、觀察者設計模式)的理解

1):單例模式 package designMode.singleton; /** * 單例模式形成的原因: * * 構造器私有---> 外界無法例項化,就在類內部建立一個例項物件,用static修飾,可以用類名直接呼叫---> 但是,類的一般用法都講究

代理模式,簡單(靜態)工廠模式模式,模板方法模式個人理解

簡言: java中總共有23種設計模式,每個模式的出現都是為了解決某一方面的問題,所以這23種設計模式有他們各自適用的地方(廢話有點多),而設計模式的產生主要是為了降低類與類之間的耦合度。下面我們就簡單的瞭解一下幾種設計模式及使用的地方。 1.單例模式:

模式工廠

單例模式 什麼是單例模式? 單例模式想一個大獨裁者,他規定在他的國度裡面,所有資料的訪問和請求都得經過他,甚至你要呼叫相關的函式也得經過它。學術一點就是,單例模式,為某一類需求和資料提供了統一的程式介面。主要的實現技術就是,確保全域性只有一個物件的例項存在。舉個例子把,比

scala 基礎十二 scala apply的使用,工廠方法和模式的實現

定義 其他 返回 pack 新的 true 伴生對象 args null 1. apply 可以用來實現類似於靜態的初始化類的實例,請看下面實例 package smart.iot class applyclass { } class A {

理解js設計模式模式

單例 false single 這樣的 字面量 不可靠 urn 如果 == 單例模式的定義:只提供唯一的一個實例來讓你訪問 js中單例是天然存在的: var a1={ hello:‘js‘ } var a2={ hello:‘js‘ } cons

Java 設計模式學習-模式&工廠模式

最近看一個專案的原始碼,裡面的很多程式碼都不是很懂,原來是因為不理解程式碼中的設計模式,在一些大神的部落格中,學習一一些設計模式的知識,現把學習的內容記錄下來。 單例模式 單例模式是常用的設計模式,在java 應用中,能保證在一個JVM中,該物件只有一個例項存在,這樣的設計有幾個好處

常見的設計模式工廠模式模式

工廠模式 工廠方法模式有兩個抽象類,一個是產品抽象類,一個是工廠抽象類,若干個具體產品類和對應的具體工廠類,具體產品抽象類與產品抽象類是實現關係,與具體工廠類是依賴關係,具體工廠類與抽象工廠類是實現關係。 客戶端程式碼如下 工廠模式是定義一個用於建立物件的介面,讓子類決定將哪一個

理解設計模式之——模式

轉載自:https://www.cnblogs.com/zhaoyan001/p/6365064.html 單例模式是最常用到的設計模式之一,熟悉設計模式的朋友對單例模式都不會陌生。一般介紹單例模式的書籍都會提到 餓漢式 和 懶漢式 這兩種實現方式。但是除

java中的設計模式模式工廠模式

Java中的設計模式            轉載地址:https://www.toutiao.com/i6573486403282272775/ 為什麼要學習設計模式 1)設計模式都是一些相對優秀的解決方案,很多問題都是典型的

設計模式模式五(序列化反序列化破壞)

單例模式的核心是要保證單例,但是在將一個例項序列化到一個檔案中後,再反序列化得到一個例項,這兩個例項是不同的,這就違反了單例原則,如下面惡漢式單例模式對序列化的測試: 由上面的列印資訊可知得到的是兩個不同的例項,通過除錯跟程式碼可以很容易發現,在反序列化時通過反