定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到子類
樣例:女媧通過八卦爐造白種人、黃種人、黑種人。
見**:
//工廠要生產的人的介面
public inte***ce human
//黑種人
public class blackhuman implements human
@override
public void talk()
}
//黃種人
public class yellowhuman implements human
@override
public void talk()
}
//白種人
public class whitehuman implements human
@override
public void talk()
}
接下來的**用到了泛型
//抽象人類建立工廠,泛型限定了輸入引數必須是class型別、必須是human的實現類
public abstract class abstracthumanfactory
//人類建立工廠
public class humanfactory extends abstracthumanfactory catch(exception e)
return (t)human;
}}
ok,現在讓我們想一下女媧會給八卦爐下達什麼樣的生產命令呢?應該是「給我生產乙個黃色人種」,而不會是「給我生產乙個會走、會跑、會說話、**是黃色的人」,因為這樣的命令增加了交流的成本,作為乙個生產的管理者,只要知道生產什麼就可以了,而不需要失誤的具體資訊。
現在女媧開始幹活了
下面的**用到了反射機制。
public class nvwa
}
下面是工廠模式的乙個比較實用、易拓展的框架,讀者可以根據實際專案需要進行拓展
//抽象產品類
public abstract class product
//抽象方法
public abstract void method2();
}
//具體的產品類
public class concreteproduct01 extends product
}----------
public class concreteproduct02 extends product
}
//抽象工廠類
public abstract class creator
//具體工廠類
public class contretecreator extends creatorcatch(exception e)
}/*public t createproduct(string productname)catch(exception e)}*/
}
//場景類
public class client
}
1、首先,良好的封裝性,**結構清晰。乙個呼叫者需要乙個具體的產品物件的話,只要知道這個產品的類名(或你使用的字串)就可以了。
2、工廠方法模式的封裝性非常優秀。在增加產品類的情況下,只要適當地修改具體的工廠類(用反射機制是不用修改的)或拓展乙個工廠類,就可以完成「擁抱變化」。
3、遮蔽產品類。產品類如何變化,只要產品介面不變就跟我們沒有關係。
4、最後,工廠模式方法是典型的解耦框架。高層模組只需要知道產品的抽象類,別的不用關心,符合迪公尺特法則。只依賴產品類的抽象,符合依賴倒置原則。使用產品子類替換產品父類,也符合黎克特制替換原則。
1、縮小為簡單工廠模式。如果只有一種工廠,那麼我們就不需要抽象工廠了,產品類都不需要改變,同時這個唯一工廠的方法設定成static的
public class humanfactorycatch(exception e)
return (t)human;
}}
2、公升級為多個工廠類
當我們在做乙個比較複雜的專案時,經常會遇到初始化乙個物件很耗費精力的情況,所有的產品類都放到乙個工廠方法中進行初始化,會是**結構不清晰。例如,如果乙個產品類有5個具體實現,每個實現類的初始化(不僅僅是new,還包括對物件設定初始值等)都不相同,如果寫在乙個工廠方法中,勢必會導致該方法類巨大無比。
怎麼辦呢?
每一種產品都有自己的工廠,並在自己的工廠中初始化自己。
《設計模式之禪》 工廠方法模式的擴充套件
1.靜態工廠模式 簡單工廠模式 其實就是去掉了抽象工廠類,然後定義乙個工廠類的建立方法設定為靜態方法簡化了工廠類的建立 public class factory catch exception e retrun t product 這個是用通用型建立的工廠模式 靜態的public class cli...
設計模式 工廠模式之工廠方法模式
工廠方法模式是指定義乙個建立物件的介面,然後實現這個介面的工廠來決定建立什麼樣的例項。工廠方法讓類的例項推遲到子類中進行。在這個模式中,只關心需要建立的是什麼工廠,不需要關心建立的細節。而且新加入的產品符合開閉原則。1 建立支付介面,裡面定義抽象的支付方法。package com.gupao.vip...
設計模式之工廠方法模式
package com.csair.design.pattern 工廠方法,有抽象基類,每個子類生產乙個具體物件,與抽象工廠的關係是,抽象工廠生產多個產品 產品有某種內在聯絡 工廠方法只生產乙個物件 author ppt public class factorymethod public stati...