自學日記 設計模式 工廠模式

2021-10-21 19:48:58 字數 3294 閱讀 7320

設計模式大多應用於框架級別,我們在看框架原始碼時,會看到各種設計模式,雖然我肯定是寫不出來框架的,但是還是覺得要學一下!

故事開始:

聯盟和部落脆弱的協議又扯淡了,戰爭一觸即發,雙方需要坦克,飛機,ak47,m4a1,東風快遞等各種重火力。。。。烏瑞恩國王開始為戰略物資發愁,於是指示希爾瓦娜斯籌措物資。。。希爾瓦娜斯於是開始new各種各樣的**出來,但是戰爭一打就是4年,new的黑眼圈都出來了(這也為後來希女王把天捅破埋下了伏筆。。。),然後麥迪文從黑暗之門得到啟示,我們搞個「工廠」吧!

1、工廠模式(工廠直接生成裝備,你們就不用自己來new了!你要哪個我就給哪個?但是是我必須有的,沒有的你問我要什麼?風劍和鳳凰都有的!!)

為什麼要使用工廠模式?(工廠模式的好處)

歡迎補充,自己也在總結中!

工廠模式的三種實現方法

簡單工廠模式(針對於應用場景較簡單,例如你要灰燼使者,我就生成灰燼使者,你要橙錘就給橙錘,只負責生成極品裝備的時候)

//裝備抽象類

public abstract class bean

//工廠類

public class beanfactory else if (type.equals("我要ak47"))

}return bean;

}}

//蛋刀

public class xflbean extends bean

}

//ak47

public class akbean extends bean

}

問題來了

1、如果這個工廠要增加一種其它的**怎麼辦?我的霜之哀傷還沒有湊齊了?這種方式就需要在工廠生成方法中中一一對應新增,已經提交了的**,再去修改,風險太高

2、在高併發情況中,我要生成乙個**物件,要經過諸多if else判斷,效率太低

然後麥迪文又開始瞎搞了!!

2、工廠方法模式:實現邏輯,為每個**單獨提供生成的工廠(然後各種**就爛大街了),但是打仗嘛,總的付出代價!

工廠方法模式(為了解決上面簡單工廠模型帶來的弊端,為每一種裝備都提供乙個工廠分開生產)

//建立工廠介面

public inte***ce beanfactory

//東方快遞的工廠實現類

public class dfbeanfactory implements beanfactory

}

//ak47的工廠實現類

public class xflbeanfactory implements beanfactory

public static void main(string args)

}

果然這樣子提高了效率,如果需要新增裝備,我們只需要建立裝備類,然後再去建立乙個裝備工廠類,要多少有多少!

抽象工廠模式

燃燒軍團入侵了,已經到了不得不動用大規模作戰的時候,這個時候就類似於要組建多個團隊出征,然而團隊是需要講配置的,比如乙個小隊裡面,要1個tank,1個奶媽,1個盜賊,1個法師,還需要乙個j20戰鬥機!!!這是單獨作戰已經失去了意義,聯盟和部落必須團結一致,且以乙個小隊乙個小隊的形式進行打副本,對工廠的要求也變成了乙個工廠要配置成為可以生產要tank,奶媽,盜賊,法師,j20戰鬥機的要求。這裡以坦克和j20戰鬥機舉例:

//要生產t,也要生產飛機

public inte***ce factory

//坦克抽象類

public abstract class car

//飛機的抽象類

public abstract class plane

public class armorcar extends car

public void run()

}

public class tankcar extends car

public void run()

}

public class j20plane extends plane

}

public class yun20plane extends  plane

}

//部落兵工廠

public class afactory implements factory

public plane createplane()

}

//聯盟兵工廠

public class bfactory implements factory

public plane createplane()

}

public class client 

}

從**層面的理解,如果a類引用了其它的2個以上的類,b類,c類,從業務需求上需要b、c類配合完成業務邏輯(這兩個類可以不存在繼承或者介面實現的關聯),我們要使用工廠模式來生成物件的時候可以使用。當燃燒軍團需要加入對抗虛空大軍的時候,由薩格拉斯直接組織乙個燃燒軍團工廠就可以,便於擴充套件,且如果部落反出現問題就直接修改部落工廠,聯盟方出現問題就直接修改聯盟方!不用想簡單工程模式一樣修改整個工廠**!

對於抽象工廠的理解誤區,有多個類繼承於同乙個抽象類,為這多個類提供乙個統一的工廠。抽象類的定義為不確定該類是否還有其它的屬性或者方法,但是他們肯定有共同的特徵(共同的屬性和方法),因為它的不確定性,所以規定抽象類不能被例項化。

此處用車進行舉例:車肯定是擁有行駛的方法,但是其具體表現可能是火車,汽車,自行車,嬰兒車等等,他們擁有不同的輪胎數量,有些是人力的,有些是有發動機的。所以從程式邏輯上來講,我們是不能例項化乙個叫「車」的物件的,它是乙個概念,因此我們把它抽象成乙個抽象類。(此處和繼承普通類有所不同,如果你認為可以例項化出來乙個叫「車」的物件,那這裡應該是父類和子類的關係)。

所以在這裡我們為該抽象類的所有實現類提供統一的生產工廠。

第一次寫部落格,裡面關於魔獸的舉例也是便於自己理解,不喜勿噴。有紕漏或者理解錯誤的地方萬望指正!!

自學日記 設計模式 單例模式

單例模式是指在整個程式執行期間,保證某個類只有乙個例項化物件,因此構造方法肯定是私有的,因為外部是無法new出來物件的,所以獲取類的方法必須是靜態的。常見的引用場景包括 程式配置類,使用程式在啟動的時候只需要配置一次。也可以理解成程式在啟動的時候需要載入的一些東西,一些準備工作。連線池 執行緒池等物...

小白自學設計模式之工廠模式

最簡單的案例 簡單工廠模式 1.就是指不需要使用new物件來建立例項,遮蔽了內部實現的細節 class factorya public static factorya create public void showmethod public class samplefactory 簡單工廠模式 2....

自學設計模式之工廠方法模式

1.定義 工廠方法模式 定義乙個建立物件的介面,讓子類決定例項化哪乙個類,即使乙個類的例項化延遲到子類。2.工廠方法模式的四個要素 抽象工廠 creator 角色 是工廠方法模式的核心,與應用程式無關。任何在模式中建立的物件的工廠類必須實現這個介面。具體工廠 concrete creator 角色 ...