大話設計模式之_工廠模式
- 工程方法(即簡單工廠模式simpleFactory姐帚,或靜態(tài)工廠方法 static factory method)
- 抽象工廠
什么是工廠呢顾患?
工程模式是我們最常用的設計模式枢里,在很多開源框架里頭可以說工程模式是遍地開花呀账锹,當然你如果你有興趣寫一個開源框架那么還得掌握:注解雁比、反射機制,這個小筆筆會在后面跟大家分享吐槽侧蘸。給大家附上:筆者曾經(jīng)寫的一個app的下拉刷新和加載更多的框架(由于涉及到公司的安全協(xié)議裁眯,這里給大家分享實現(xiàn)的思路和部分核心代碼)
言歸正傳:工廠模式是我們最常用的實例化對象模式,通俗的說就是用工廠方法替代new操作一種設計模式
1.工廠方法
核心思想就只要記住一句話:有一個抽象的Factory類(可以是抽象類和接口)這個類不負責在具體的產(chǎn)品生產(chǎn)讳癌,而是制定一種規(guī)范穿稳,具體的生產(chǎn)由其子類去完成。
ps:如果你理解上面這句話了晌坤,那么就說明你已經(jīng)掌握了過程設計模式的精髓了逢艘,現(xiàn)在你已經(jīng)成功了80%了,別擔心骤菠,剩下的20%我給大家貼個demo就一目了然了
//1.定義接口
public interface People{
public void say();
}
//2.1接口的實現(xiàn)類
public void Chinese implements People{
public void say(){
system.out.printfln("中國話");
}
}
//2.2接口的實現(xiàn)類
public void Amercia implements People{
public void say(){
system.out.printfln("英語");
}
}
//3.工廠類它改,制定規(guī)范
public class People_Factory{
//方法的返回值,用到了多態(tài)
public static People create(int type){
if(type ==1){
return new Chinese();
}else if(type ==2){
return new Amercia();
}
}
}
//4.演示效果
public class TestFactory{
public static void main(String[]args){
People p = People_Factory.create(1);
p.say();
People p = People_Factory.create(2);
p.say();
}
}
2.抽象工廠
抽象工廠模式是工廠方法模式的升級版商乎,它是用來創(chuàng)建一組相關或者相互依賴的對象央拖。(又是很精辟的一句話,此處高能好好品味)
是不是有點難以理解截亦?那就看下他們的區(qū)別對比下不同點爬泥,然后就知道抽象工廠是什么了。工廠方法模式針對的是一個產(chǎn)品等級結(jié)構(gòu)崩瓤;而抽象工廠模式則是對對個產(chǎn)品等級結(jié)構(gòu)。
在編碼中踩官,通常一個產(chǎn)品結(jié)構(gòu)為一個接口或者抽象類却桶,也就是說,工廠方法模式提供的所有產(chǎn)品都是衍生自同一個接口或者抽象類的蔗牡,而抽象工廠模式所提供的產(chǎn)品則是衍生自不同的接口或者抽象類颖系。
在抽象工廠模式中,有一個產(chǎn)品族的概念(即位于不同產(chǎn)品等級結(jié)構(gòu)中功能相關聯(lián)的產(chǎn)品組成的家族)辩越。抽象工廠模式所提供的一系列產(chǎn)品就組成一個產(chǎn)品族嘁扼;而工廠方法提供的一系列產(chǎn)品稱為一個等級結(jié)構(gòu)。
下面以生產(chǎn)汽車的例子講述抽象工廠
2.0排量兩車廂黔攒、2.3排量兩車廂:屬同一等級結(jié)構(gòu)**
2.0排量兩車廂趁啸、2.0排量三車廂:屬同一個產(chǎn)品族**
ps:老規(guī)矩上代碼强缘,講了一大通還是代碼直觀點
//1.1定義產(chǎn)品1接口
public IProduct1{
public void show();
}
//1.2定義產(chǎn)品2接口
public IProduct2{
public void show()不傅;
}
//2.1實現(xiàn)定義的接口
class Product1 implements IProduct1{
public void show(){
system.out.println("這是產(chǎn)品1");
}
}
//2.2實現(xiàn)定義的接口
class Product2 implements IProduct2{
public void show(){
system.out.println("這是產(chǎn)品2");
}
}
//3抽象工廠的接口
interface IFactory{
public IProduct1 createProduct1()旅掂;
public IProduct2 createProduct2();
}
//4抽象工廠的實現(xiàn)類
class MyFactory implements IFactory{
public IProduct1 createProduct1(){
return new Product1();
}
public IProduct2 createProduct2(){
return new Product2();
}
}
//5如何使用
public class Client{
public static void main(String[]args){
IFactory factory = new MyFactory();
factory.createProduct1().show();
factory.createProduct1().show();
}
}
總結(jié)
如果工廠的產(chǎn)品全部屬于同一個等級結(jié)構(gòu)访娶,則屬于工廠方法模式商虐;如果工廠的產(chǎn)品來自多個等級結(jié)構(gòu),則屬于抽象工廠模式崖疤。