我們常見的設計模式,大致可以分為三大類:建立型、結構性、行為型。工廠模式,屬於建立型。
工廠模式到底起的是什麼作用呢?概括來說就是解耦。當某一類物件需要頻繁建立的時候,就會和程式產生比較大的耦合,在物件初始化屬性較多時,工廠模式可以較少這種耦合,這就是他的作用。
一般情況下根據場景不同,工廠模式有幾種不同的形式,簡單工廠、工廠方法和抽象工廠,可以說這三種的關係是層層遞進的。今天我們就說簡單工廠。
首先可以建立rcbutton和rcimageview兩個自定義的類用來測試,接下來就就是工廠類的實現
viewfactory.m
@implementation viewfactory
+(nsobject*)creatviews
@end
這樣我們就可以直接呼叫工廠類的類方法來建立物件了
rcbutton *button = [viewfactory creatviews];
這樣寫完就是乙個簡單工廠了,但其實我們並不會這樣寫,因為乙個工廠通常要製造出不同型別的物件,就像乙個服裝廠,既可以聲場衣服,又可以生產寫字鞋子,還可以生產帽子等等,其實在工廠類的.m中要這樣寫
+(nsobject*)creatviews:(nsinteger)chose
return obj;
}
這樣我們就可以通過傳入相應的chose來建立我們想要的物件了
rcbutton *button = [viewfactory creatviews:0];
rcimageview *imageview = [viewfactory creatviews:1];
這樣寫其實還存在一些問題,如果說只有兩三個型別的物件,這種方式就可以滿足了,但如果我們的物件型別很多呢,50個型別要寫50個判斷嗎,有沒有設麼方式可以不去做型別的判斷呢,當然是有的,這個時候,我們一般是把工廠物件設定成單例,然後這樣做
viewfactory.m
static viewfactory *instance = nil;
+ (id)sharedinstance);
return instance;
}- (instancetype)init
return self;
}-(nsobject*)creatviews:(nsinteger)chose
在工廠類裡面配置好每個key對應的型別,建立物件的時候,直接傳入乙個key,就能得到我們想要的物件了,是不是很方便,這樣即使是有100個型別,我們只需要在工廠裡面配置下儲存物件型別的_dic就搞定了。
寫到這裡其實已經很完善了,唯一的不足是物件型別的配置,有更好的方式,那就是通過配置檔案去動態的載入物件型別,而不是寫在工廠類裡面。也就是將配置資訊放到配置檔案中,通過解析配置檔案,得到儲存物件型別的_dic
配置檔案裡的內容是這樣的
<?xml version="1.0" encoding="utf-8"?>
遵循nsxmlparserdelegate之後,解析的過程是這樣的
-(nsmutabledictionary*)parser
- (void)parser:(nsxmlparser *)parser didstartelement:(nsstring *)elementname namespaceuri:(nullable nsstring *)namespaceuri qualifiedname:(nullable nsstring *)qname attributes:(nsdictionary*)attributedict
}
這樣就拿到了儲存配置資訊的_dic,只需在初始化工廠類的時候,執行這個解析的操作,其餘步驟都不用做修改,這樣,乙個完整的簡單工廠就實現了,不管是多少個類,我們都不需要去改動的什麼**,只需修改配置檔案,傳入對應的key,我們就能建立出想要的物件了。
工廠模式中工廠方法的使用
希望對你有幫助!
設計模式 工廠模式之簡單工廠
工廠模式可以分為 簡單工廠模式 普通工廠模式 靜態工廠模式 抽象工廠模式 簡單工廠模式 就是如何去例項化物件的問題,對於很容易變化的問題,應該考慮用乙個單獨的類來做這個創造例項的過程,這個單獨的類就是工廠 例子 通過簡單工廠建立各種圖形的實現過程 簡單工廠模式建立步驟 建立乙個介面 例 圖形介面 建...
設計模式 工廠模式之簡單工廠模式
定義 由乙個工廠物件 工廠類 來指定建立某乙個產品類的例項。使用場景 客戶端只需傳入指定的引數即可,工廠類負責建立的物件較少 因為指定了傳入的引數 介面類 本想用iphone命名的,見諒 public inte ce phone實現介面類 public class huaweiphone imple...
設計模式之 工廠模式(簡單工廠模式2)
工廠類是指包含乙個專門用來建立其他物件的方法的類,工廠類在多型性程式設計實踐中是至關重要的,它允許動態的替換類,修改配置,通常會使應用程式更加 靈活,熟練掌握工廠模式高階php開發人員是很重要的。工廠模式通常用來返回符合類似介面的不同的類,工廠的一種常見用法就是建立多型的提供者,從而允許我們基於應用...