工廠三兄弟22

1.簡單工廠模式

基本流程:
首先將需要創(chuàng)建的各種不同對象的相關(guān)代碼封裝到不同的類中,這些類稱之為具體產(chǎn)品類,而將他們公共的代碼進行抽象和提取后封裝在一個抽象產(chǎn)品類中锅尘,每一個具體產(chǎn)品類都是抽象產(chǎn)品類的子類暂吉;然后提供一個工廠類用于創(chuàng)建各種產(chǎn)品陆蟆,在工廠類中提供一個創(chuàng)建產(chǎn)品的工廠方法字支,該方法可以根據(jù)所傳入的參數(shù)不同創(chuàng)建不同的具體產(chǎn)品對象凤藏;客戶端只需要調(diào)用工廠類的工廠方法并傳入響應(yīng)的參數(shù)即可得到一個產(chǎn)品對象。

簡單工廠模式:定義一個工廠類堕伪,它可以根據(jù)參數(shù)的不同返回不同類的實例揖庄,被創(chuàng)建的實例通常都具有共同的父類。因為在簡單工廠模式中用于創(chuàng)建實例的方法是靜態(tài)方法欠雌,因此簡單工廠模式又被稱之為靜態(tài)工廠方法模式蹄梢,它屬于類創(chuàng)建型模式

abstract class Product {  
    //所有產(chǎn)品類的公共業(yè)務(wù)方法  
    public void methodSame() {  
        //公共方法的實現(xiàn)  
    }  
  
    //聲明抽象業(yè)務(wù)方法  
    public abstract void methodDiff();  
}  

class ConcreteProductA extends Product {  
    //實現(xiàn)業(yè)務(wù)方法  
    public void methodDiff() {  
        //業(yè)務(wù)方法的實現(xiàn)  
    }  
}  

class ConcreteProductB extends Product {  
    //實現(xiàn)業(yè)務(wù)方法  
    public void methodDiff() {  
        //業(yè)務(wù)方法的實現(xiàn)  
    }  
}  
class Factory {  
    //靜態(tài)工廠方法  
    public static Product getProduct(String arg) {  
        Product product = null;  
        if (arg.equalsIgnoreCase("A")) {  
            product = new ConcreteProductA();  
            //初始化設(shè)置product  
        }  
        else if (arg.equalsIgnoreCase("B")) {  
            product = new ConcreteProductB();  
            //初始化設(shè)置product  
        }  
        return product;  
    }  
}  
class Client {  
   public static void main(String args[]) {  
       Product product;   
       product = Factory.getProduct("A"); //通過工廠類創(chuàng)建產(chǎn)品對象  
       product.methodSame();  
       product.methodDiff();  
   }  
}  

2.工廠方法模式

工廠方法模式:定義一個用于創(chuàng)建對象的接口,讓子類決定將哪一個類實例化富俄。工廠方法模式讓一個類的實例化延遲到其子類禁炒。工廠方法模式又簡稱為工廠模式,又可稱作虛擬構(gòu)造器模式或多態(tài)工廠模式霍比。工廠方法模式是一種類創(chuàng)建型模式

image.png
//日志記錄器接口:抽象產(chǎn)品  
interface Logger {  
 public void writeLog();  
}  

//數(shù)據(jù)庫日志記錄器:具體產(chǎn)品  
class DatabaseLogger implements Logger {  
 public void writeLog() {  
     System.out.println("數(shù)據(jù)庫日志記錄幕袱。");  
 }  
}  

//文件日志記錄器:具體產(chǎn)品  
class FileLogger implements Logger {  
 public void writeLog() {  
     System.out.println("文件日志記錄。");  
 }  
}  

//日志記錄器工廠接口:抽象工廠  
interface LoggerFactory {  
 public Logger createLogger();  
}  

//數(shù)據(jù)庫日志記錄器工廠類:具體工廠  
class DatabaseLoggerFactory implements LoggerFactory {  
 public Logger createLogger() {  
         //連接數(shù)據(jù)庫悠瞬,代碼省略  
         //創(chuàng)建數(shù)據(jù)庫日志記錄器對象  
         Logger logger = new DatabaseLogger();   
         //初始化數(shù)據(jù)庫日志記錄器们豌,代碼省略  
         return logger;  
 }     
}  

//文件日志記錄器工廠類:具體工廠  
class FileLoggerFactory implements LoggerFactory {  
 public Logger createLogger() {  
         //創(chuàng)建文件日志記錄器對象  
         Logger logger = new FileLogger();   
         //創(chuàng)建文件,代碼省略  
         return logger;  
 }     
}  

編寫相關(guān)測試代碼

class Client {  
    public static void main(String args[]) {  
        LoggerFactory factory;  
        Logger logger;  
        factory = new FileLoggerFactory(); //可引入配置文件實現(xiàn)  
        logger = factory.createLogger();  
        logger.writeLog();  
    }  
}  

3.抽象工廠模式

抽象工廠模式:提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口浅妆,而無須指定它們具體的類望迎。抽象工廠模式又稱為Kit模式,它是一種對象創(chuàng)建型模式凌外。

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辩尊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子康辑,更是在濱河造成了極大的恐慌摄欲,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疮薇,死亡現(xiàn)場離奇詭異蒿涎,居然都是意外死亡,警方通過查閱死者的電腦和手機惦辛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門劳秋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胖齐,你說我怎么就攤上這事玻淑。” “怎么了呀伙?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵补履,是天一觀的道長。 經(jīng)常有香客問我剿另,道長箫锤,這世上最難降的妖魔是什么贬蛙? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮谚攒,結(jié)果婚禮上阳准,老公的妹妹穿的比我還像新娘。我一直安慰自己馏臭,他們只是感情好野蝇,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著括儒,像睡著了一般绕沈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上帮寻,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天乍狐,我揣著相機與錄音,去河邊找鬼固逗。 笑死澜躺,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的抒蚜。 我是一名探鬼主播掘鄙,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嗡髓!你這毒婦竟也來了操漠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤饿这,失蹤者是張志新(化名)和其女友劉穎浊伙,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體长捧,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡嚣鄙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了串结。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哑子。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖肌割,靈堂內(nèi)的尸體忽然破棺而出卧蜓,到底是詐尸還是另有隱情,我是刑警寧澤把敞,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布弥奸,位于F島的核電站,受9級特大地震影響奋早,放射性物質(zhì)發(fā)生泄漏盛霎。R本人自食惡果不足惜赠橙,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望愤炸。 院中可真熱鬧期揪,春花似錦、人聲如沸摇幻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绰姻。三九已至,卻和暖如春引瀑,著一層夾襖步出監(jiān)牢的瞬間狂芋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工憨栽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留帜矾,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓屑柔,卻偏偏與公主長得像屡萤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子掸宛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 設(shè)計模式匯總 一死陆、基礎(chǔ)知識 1. 設(shè)計模式概述 定義:設(shè)計模式(Design Pattern)是一套被反復(fù)使用、多...
    MinoyJet閱讀 3,948評論 1 15
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法唧瘾,類相關(guān)的語法措译,內(nèi)部類的語法,繼承相關(guān)的語法饰序,異常的語法领虹,線程的語...
    子非魚_t_閱讀 31,644評論 18 399
  • 該文章屬于劉小壯原創(chuàng),轉(zhuǎn)載請注明:劉小壯[http://www.reibang.com/u/2de707c93d...
    劉小壯閱讀 12,764評論 29 59
  • 1 場景問題# 1.1 導(dǎo)出數(shù)據(jù)的應(yīng)用框架## 考慮這樣一個實際應(yīng)用:實現(xiàn)一個導(dǎo)出數(shù)據(jù)的應(yīng)用框架求豫,來讓客戶選擇數(shù)據(jù)...
    七寸知架構(gòu)閱讀 6,665評論 6 75
  • 何以拒之塌衰,何以散之。 流光難轉(zhuǎn)蝠嘉,命運難輪猾蒂。 我只等待,花開綻放是晨。 亦似水波肚菠,波光柔情。 片片的雪花在空中輪回罩缴,我的...
    JmYs閱讀 446評論 1 1