工廠模式是我們最常用的實(shí)例化對(duì)象模式了,
是用工廠方法代替new操作的一種模式。
------百毒百科
new操作是實(shí)例化對(duì)象,工廠實(shí)例化對(duì)象意味著大批量,當(dāng)然這里的大批量指的是好幾個(gè),一些功能類似的類,將其進(jìn)行抽象,使用公共父類或借口或抽象類來提取共有特性。工廠模式分了簡(jiǎn)單工廠和抽象工廠,我們?cè)诓恢挥X中會(huì)用到的也是經(jīng)常用到是簡(jiǎn)單工廠:通過參數(shù)來創(chuàng)建不同的對(duì)象。
本文內(nèi)容十分簡(jiǎn)單,是工廠設(shè)計(jì)模式、Tab頁面以及MD控件TabLayout結(jié)合的實(shí)現(xiàn)說明,即demo的說明。
上代碼! FragmentFactoryDemo
先上圖
上圖中是app中經(jīng)常會(huì)看到的一種主頁效果,這里面設(shè)計(jì)到的四個(gè)東西:宿主activity,滑動(dòng)的viewpager,填充內(nèi)容的fragment,標(biāo)題Tablayout。
由于填充fragment的內(nèi)容各不相同,但是因?yàn)槭窍嗤?jí)別的展現(xiàn)方式,很可能具有一些共性內(nèi)容,比如都要獲取數(shù)據(jù),那抽個(gè)父類出來怎么樣?
代碼說明
activity內(nèi)的東西
MyAdapter myAdapter = new MyAdapter(getSupportFragmentManager());//實(shí)例化自定義FragmentPagerAdapter
mViewPager.setAdapter(myAdapter);//綁定ViewPager
mTabLayout.setupWithViewPager(mViewPager);//ViewPager綁定TabLayout
在內(nèi)部類MyAdapter中:
getPageTitle()方法里面返回了tab的標(biāo)題
getItem()方法,將會(huì)使用工廠模式生產(chǎn)返回第position個(gè)fragment對(duì)象
getCount()為fragment數(shù)量,即標(biāo)題有多少個(gè)就應(yīng)該有對(duì)應(yīng)多少個(gè)fragment
工廠類FragmentFactory
先抽取了公共類BaseFragment,其余的Fragment只需繼承公共類。然后在工廠類里面利用多態(tài)生產(chǎn)不同的Fragment,看代碼:
public class FragmentFactory {
private static HashMap<Integer, BaseFragment> mFragmentHashMap = new HashMap<>();
public static BaseFragment createFragment(int pos) {
BaseFragment baseFragment = mFragmentHashMap.get(pos);//從集合中取出Fragment
if (baseFragment == null) {//沒有在集合中取到再進(jìn)入實(shí)例化過程
switch (pos) {
case 0:
baseFragment = new FirstFragment();
break;
case 1:
baseFragment = new SecondFragment();
break;
case 2:
baseFragment = new ThirdFragment();
break;
case 3:
baseFragment = new ForthFragment();
break;
default:
break;
}
mFragmentHashMap.put(pos, baseFragment);//存入集合中
}
return baseFragment;
}
}
注釋清晰,這里new了四個(gè)Fragment對(duì)象,并使用HashMap作了性能優(yōu)化,已經(jīng)實(shí)例化的不會(huì)再次實(shí)例化。在MyAdapter的getItem方法中:
BaseFragment fragment = FragmentFactory.createFragment(position);
調(diào)用后會(huì)使用FragmentFactory工廠生產(chǎn)出相應(yīng)的fragment。
說明
Demo中的BaseFragment只寫了一個(gè)TextView,界面顯示為相應(yīng)fragment的類名。
上代碼! FragmentFactoryDemo
多說點(diǎn)兒
這次的內(nèi)容相對(duì)比較簡(jiǎn)單,主要是針對(duì)這個(gè)代碼設(shè)計(jì)模式的使用說明吧,Android里面使用最多的是觀察者模式,典型的就是OnClickListener,還有平時(shí)寫的接口回調(diào)什么的,呃,以后可以出個(gè)demo理解下這個(gè)流程,因?yàn)閯偨佑|到接口回調(diào)的朋友們會(huì)很有用吧。
后面將會(huì)對(duì)MVP模式,F(xiàn)lux模式,MVVM模式這樣的架構(gòu)模式進(jìn)行一些Demo說明。
【架構(gòu)篇】擴(kuò)展閱讀
《Android APP一定有的東西》之架構(gòu)篇:觀察者模式
本文作者:paradoxie
個(gè)人主頁:謝盒盒的小黑屋,不止說技術(shù)
簡(jiǎn)書地址:簡(jiǎn)書主頁,專注技術(shù)類
github地址:paradoxie
轉(zhuǎn)載請(qǐng)注明出處,蟹蟹!
-------我的夢(mèng)想真的是做一條咸魚!