尋找android中的設計模式(三)

2021-07-11 04:23:13 字數 3667 閱讀 1234



尋找android中的設計模式(三)

尋找工廠模式

工廠模式的家族分四種:靜態工廠模式、簡單工廠模式、工廠方法模式、抽象工廠模式。

下面以開冒菜店為例,假設我定義了一家冒菜店:

public class maocaistore  else if (type.equals("zhongla"))  else if (type.equals("mala"))  else 

maocai.prepare();

maocai.fire();

maocai.addtiaoliao();

return maocai;

}}

可以看到,在sellmaocai方法裡面會根據傳入引數不同而做不同口味的冒菜。這樣就違背了oo原則(單一原則,開閉原則等)如果增加一種口味的冒菜,就得修改裡面的**。看下靜態工廠模式的處理方式:

public class staticmaocaifactory  else if (type.equals("zhongla"))  else if (type.equals("mala"))  else 

return maocai;

}}

public  class maocaistore 

}

可以看到比較簡單,只是將建立冒菜的工作交給了staticmaocaifactory中的靜態方法。這樣的好處是增加一種口味的冒菜只要修改staticmaocaifactory中的靜態方法即可,將冒菜店和建立冒菜隔離,冒菜店只負責拿到冒菜開始做就行,至於冒菜的**不關心。

下面看下簡單工廠模式是如何做的:

public class samplemaocaifactory  else if (type.equals("zhongla"))  else if (type.equals("mala"))  else 

return maocai;

}}

public  class maocaistore 

public maocai sellmaocai(string type)

}

可以看出createmaocai不在是乙個靜態方法,而是需要建立工廠物件才能呼叫。好處跟靜態工廠模式一樣,只不過這裡用組合的方式把工廠組合進來。

下面看下工廠方法模式:

定義:定義乙個建立物件的介面,但由子類決定要例項化的類是哪乙個。工廠方法模式把類例項化的過程推遲到子類。

意思就是把建立冒菜的任務交給冒菜店的子類(各個分店:上海西安),如下:

public abstract class maocaistore 

}

public class shanghaimaocaistore extends maocaistore  else if (type.equals("zhongla"))  else if (type.equals("mala"))  else 

return maocai;

}}

public class xianmaocaistore extends maocaistore  else if (type.equals("zhongla"))  else if (type.equals("mala"))  else 

return maocai;

}}

可以看到,上海分店的工廠專門製造上海口味的冒菜,西安分店的工廠專門製造西安口味的冒菜。再看下定義:

定義乙個建立物件的介面就是,這個方法:

public abstract maocai createmaocai(string type);

最後看下,抽象工廠方法:

定義:提供乙個介面,用於建立相關的或依賴物件的家族,而不需要明確指定具體類。

比如冒菜店提供的各種蔬菜和肉類必須由當地提供,上海得由上海原料工廠提供,西安得由西安原料工廠提供。

下面定義乙個介面用來獲取蔬菜和肉:

public inte***ce maocaiyuanliaofactory

上海原料工廠:

public class shanghaimaocaiyuanliaofactory implements maocaiyuanliaofactory 

@override

public void createrou()

}

西安原料工廠:

public class xianmaocaiyuanliaofactory implements maocaiyuanliaofactory 

@override

public void createrou()

}

然後在各分店冒菜店裡面組合該冒菜原料工廠:

public class shanghaimaocaistore extends maocaistore

列印結果:

準備獲取上海產的蔬菜

獲取上海產的蔬菜

開抄加調料

下面尋找下

android

原始碼當中是如何使用工廠模式的:

bitmapfactory

中有很多建立點陣圖的靜態方法:(靜態工廠模式)

public static bitmap decodefile(string pathname, options opts)
@override

public joincontactlistadapter createlistadapter()

可以看到子類都實現了該介面來建立需要的介面卡。

**所有者與聯絡人之間的互動。(抽象工廠模式)

根據定義找到介面定義:

/**

* represents a default interaction between the phone's owner and a contact

*/public inte***ce contactinteraction

可以看到這麼多介面用來建立跟聯絡人相關的產品。具體建立哪些物件在實現類裡面提供。

一般跟聯絡人的互動有通話、簡訊、日曆活動。如下:

public class calendarinteraction implements contactinteraction

其他smsinteraction和calendarinteraction也都建立了圖示。

總結

學完了工廠模式後,下面總結下目前涉及oo原則:

封裝變化

多用組合,少用繼承

針對介面程式設計,不針對實現程式設計

為互動物件之間的松耦合設計而努力

類應該對擴充套件開發,對修改關閉

依賴抽象,不要依賴具體類

Android中的設計模式 介面卡模式

從名字上就可以看出介面卡是為了針對介面不匹配的情況,而做出的相容方法,假設我們有乙個已經存在的類adaptee,其中有一些已經存在並實現好的方法methoda。但是客戶不希望呼叫這個類,而是希望呼叫乙個特定的介面例如target介面。於是如果想要呼叫adaptee.methoda 方法,建立乙個ad...

Android中的設計模式之直譯器模式

給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器適用該表示來解釋語言中的句子。當有乙個語言需要解釋執行,並且你可將該語言中的句子表示為乙個抽象語法樹時,可使用直譯器模式。而當存在以下情況時該模式效果最好 例 s aba ef a cd符號 表示推導 符號 表示閉包,意思就是符號a可...

Android系統設計中的設計模式分析之四

uml中,不同的物件之間的關係有generation,implementation,dependence,association,aggregation,composition這六種關係。其中,generation,implementation,dependence這個比較容易 理解,代表了程式中的...