hjr 設計模式 工廠模式

2021-07-23 12:03:27 字數 1647 閱讀 6939

子類乙個方法fun與父類同名,用下面格式例化物件:

父類 ob = new 子類();

這樣當我們用使用db裡的fun方法時,實際執行的是子類的方法,而不是父類的fun,雖然我們宣告ob的型別是父類的型別。

這就造成了乙個問題,當我們定義很多子類後,用上面格式例化物件後,引用型別都是父類,但是new不同的子類後,fun方法就會有不同的實現,這也叫多型。

為什麼例化時引用型別不用子類型別而用父類型別呢?

下面有解釋

物件是引用型別,int,float之類的是資料型別。

既然所有實現都可以用子類去重寫,那我們直接把父類再簡化,不寫具體實現,只寫一下方法名字,規定一下傳入的引數和返回值型別,在寫一些所有子類都要用到的屬性得了,畢竟各個兒子都各有本事,做父親的就可以輕鬆點,直接告訴兒子要做的事,和給所有兒子都需要用的錢,手機,身份證之類的,讓他們自己去闖蕩,這樣的父類就叫做抽象類。

現在問題就是,幹一件事去new哪個子類,我們建乙個工廠類,裡面寫上乙個帶引數p的方法fun,方法裡有switch,根據傳入的不同p引數,返回不同的new之後的物件。

返回值引用型別就用父類的型別,這也是上面問題的答案,如果例化時引用型別用子類型別,那返回型別就有多個,沒法寫返回值。

然後在要用到功能的地方,例化乙個工廠類物件同時傳乙個引數到fun方法裡,賦值給乙個父類型別的物件ob,在使用ob裡的方法就行了。

所以:父親提供渠道,不同兒子各顯神通完成父親接到的活,工廠類確定要用哪個兒子幹活,最後名義上還是用父類的方法去實現,但實際上具體幹活的已經是某個兒子了,這也是多型的應用。這一整套流程就是設計模式中的簡單工廠模式

工廠方法模式是在簡單工廠的基礎上,再建乙個工廠介面,然後多個工廠類呼叫該介面,即在簡單工廠的基礎上再做一層抽象。

簡單工廠(伺服器):

static class ******factory

}}

客戶端:

抽象父類 obj = ******factory.fun(str);

obj.operate();

工廠方法(伺服器):

inte***ce ifactory

class factory1:ifactory

}class factory2:ifactory

}

客戶端:

工廠介面 factory = new factory1/factory2 ();//在這裡決定`new`哪個工廠

//接下來就和簡單工廠一樣了

抽象父類 obj = factory.fun(str);

obj.operate();

其實就是,簡單工廠:乙個工廠對應多個產品類,在伺服器端根據不同字串確定返回哪個產品

工廠方法:每個產品類都有乙個工廠,在客戶端根據不同字串判斷new哪個工廠,然後直接用該工廠生產產品。

也就是乙個在伺服器產品層判斷,乙個在客戶端工廠層判斷。

當需要生產多個同一產品時,用工廠方法,這樣如果改動的話,只要該工廠,多個產品都改動,如果是簡單工廠,改動需要每個產品都改一次。

設計模式 工廠模式 抽象工廠模式

建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...

設計模式 工廠設計模式

用於建立物件的介面,交給子類去實現 我們舉乙個生產nokia的例子 public abstract class nokiaphone先試定義了乙個抽象類,抽象出方法poweronphone 模擬手機開機的動作 public class nokia5200 extends nokiaphone pub...

設計模式 工廠設計模式

工廠模式分為工廠方法模式和抽象工廠模式 工廠方法模式分為 普通工廠模式,就是建立乙個工廠類,對實現了同一介面的一些類進行例項的建立。多個工廠方法模式,是對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字串出錯,則不能正確建立物件,而多個工廠方法模式是提供多個工廠方法,分別建立物件。靜態工廠...