国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android模板設(shè)計模式之 - 構(gòu)建整個應用的BaseActivity

這篇具有很好參考價值的文章主要介紹了Android模板設(shè)計模式之 - 構(gòu)建整個應用的BaseActivity。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. 模式介紹

模式的定義
定義一個操作中的算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。

模式的使用場景
1.多個子類有公有的方法,并且邏輯基本相同時。
2.重要、復雜的算法,可以把核心算法設(shè)計為模板方法,周邊的相關(guān)細節(jié)功能則由各個子類實現(xiàn)。
3.重構(gòu)時,模板方法模式是一個經(jīng)常使用的模式,把相同的代碼抽取到父類中,然后通過鉤子函數(shù)約束其行為。

2. UML類圖

Android模板設(shè)計模式之 - 構(gòu)建整個應用的BaseActivity,安卓自定義view,android,設(shè)計模式
角色介紹

  • AbstractClass : 抽象類,定義了一套算法框架。
  • ConcreteClass1 : 具體實現(xiàn)類1;
  • ConcreteClass2: 具體實現(xiàn)類2;

3. 模式的簡單實現(xiàn)

簡單實現(xiàn)的介紹
模板方法實際上是封裝一個算法框架,就像是一套模板一樣。而子類可以有不同的算法實現(xiàn),在框架不被修改的情況下實現(xiàn)算法的替換。下面我們以開電腦這個動作來簡單演示一下模板方法。開電腦的整個過程都是相對穩(wěn)定的,首先打開電腦電源,電腦檢測自身狀態(tài)沒有問題時將進入操作系統(tǒng),對用戶進行驗證之后即可登錄電腦,下面我們使用模板方法來模擬一下這個過程。

實現(xiàn)源碼

package com.dp.example.templatemethod;

/**
 * 抽象的Computer
 * @author mrsimple
 *
 */
public abstract class AbstractComputer {

    protected void powerOn() {
        System.out.println("開啟電源");
    }

    protected void checkHardware() {
        System.out.println("硬件檢查");
    }

    protected void loadOS() {
        System.out.println("載入操作系統(tǒng)");
    }

    protected void login() {
        System.out.println("小白的電腦無驗證,直接進入系統(tǒng)");
    }

    /**
     * 啟動電腦方法, 步驟固定為開啟電源、系統(tǒng)檢查、加載操作系統(tǒng)、用戶登錄。該方法為final, 防止算法框架被覆寫.
     */
    public final void startUp() {
        System.out.println("------ 開機 START ------");
        powerOn();
        checkHardware();
        loadOS();
        login();
        System.out.println("------ 開機 END ------");
    }
}


package com.dp.example.templatemethod;

/**
 * 碼農(nóng)的計算機
 * 
 * @author mrsimple
 */
public class CoderComputer extends AbstractComputer {
    @Override
    protected void login() {
        System.out.println("碼農(nóng)只需要進行用戶和密碼驗證就可以了");
    }
}


package com.dp.example.templatemethod;

/**
 * 軍用計算機
 * 
 * @author mrsimple
 */
public class MilitaryComputer extends AbstractComputer {


    @Override
    protected void checkHardware() {
        super.checkHardware();
        System.out.println("檢查硬件防火墻");
    }

    @Override
    protected void login() {
        System.out.println("進行指紋之別等復雜的用戶驗證");
    }
}


package com.dp.example.templatemethod;

public class Test {
    public static void main(String[] args) {
        AbstractComputer comp = new CoderComputer();
        comp.startUp();

        comp = new MilitaryComputer();
        comp.startUp();

    }
}

輸出結(jié)果如下 :

------ 開機 START ------
開啟電源
硬件檢查
載入操作系統(tǒng)
碼農(nóng)只需要進行用戶和密碼驗證就可以了
------ 開機 END ------
------ 開機 START ------
開啟電源
硬件檢查
檢查硬件防火墻
載入操作系統(tǒng)
進行指紋之別等復雜的用戶驗證
------ 開機 END ------

過上面的例子可以看到,在startUp方法中有一些固定的步驟,依次為開啟電源、檢查硬件、加載系統(tǒng)、用戶登錄四個步驟,這四個步驟是電腦開機過程中不會變動的四個過程。但是不同用戶的這幾個步驟的實現(xiàn)可能各不相同,因此他們可以用不同的實現(xiàn)。而startUp為final方法,即保證了算法框架不能修改,具體算法實現(xiàn)卻可以靈活改變。startUp中的這幾個算法步驟我們可以稱為是一個套路,即可稱為模板方法。因此,模板方法是定義一個操作中的算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。如圖 :
Android模板設(shè)計模式之 - 構(gòu)建整個應用的BaseActivity,安卓自定義view,android,設(shè)計模式

4. 構(gòu)建整個應用的BaseActivity

每個項目肯定離不開Activity,在Activity的onCreate()方法里面基本都是:設(shè)置布局 ->初始化頭部 -> 初始化界面 -> 初始化數(shù)據(jù)。如果按照這么個流程是不是剛好符合我們模板設(shè)計模式。

public abstract class BaseActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView();
        initTitle();
        initView();
        initData();
    }

    // 初始化數(shù)據(jù)
    protected abstract void initData();

    // 初始化界面
    protected abstract void initView();

    // 設(shè)置界面視圖
    protected abstract void setContentView();

    // 初始化頭部
    protected abstract void initTitle();
}

以后我們每次新建Activity就不會直接繼承自 AppCompatActivity 而是我們自己的BaseActivity就會自動要我們復寫B(tài)aseActivity里面的幾個抽象方法,我們在方法里面寫對應的代碼。

public class MainActivity extends BaseActivity {

    @Override
    protected void initData() {

    }

    @Override
    protected void initView() {

    }

    @Override
    protected void setContentView() {
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void initTitle() {

    }
}

這也沒見到什么好處啊~好處我待會再來說,我們先對BaseActivity來擴展一下,一些通用的流程和功能其實可以放在BaseActivity里面,比如前幾次所分享的自己動手打造一套IOC注解框架、啟動Activity…

public abstract class BaseActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView();
        // IOC注解注入
        ViewUtils.inject(this);
        initTitle();
        initView();
        initData();
    }

    // 初始化數(shù)據(jù)
    protected abstract void initData();

    // 初始化界面
    protected abstract void initView();

    // 設(shè)置界面視圖
    protected abstract void setContentView();

    // 初始化頭部
    protected abstract void initTitle();


    /**
     * 啟動一個Activity
     * @param activity  需要啟動的Activity的Class
     */
    public void startActivity(Class<? extends Activity> activity) {
        Intent intent = new Intent(this,activity);
        startActivity(intent);
    }

    /**
     *  findViewById 不需要再去強轉(zhuǎn)
     */
    public <T extends View> T viewById(@IdRes int resId) {
        return (T) super.findViewById(resId);
    }
}

接下來我們來說一下好處,模板設(shè)計模式的好處就不說了網(wǎng)上太多了,我們就只說在真正的開發(fā)中這么做的好處文章來源地址http://www.zghlxwxcb.cn/news/detail-645911.html

  • 在實際的開發(fā)過程中我們往往不是一個人在開發(fā),如果把直接在onCreate()里面寫很多東西顯然不行,但是如果寫一些方法,那么每個成員所寫的方法都會不同,何況有些哥們英語估計沒過四級,單詞都寫錯;
  • 直接繼承自BaseActivity會自動提示覆蓋方法,更加有利于開發(fā)或者代碼的閱讀,每個方法各盡其職只干自己該干的事,沒事干就歇著;
  • 我們可以把通用的流程或者是某些方法放到BaseActivity,這樣又節(jié)省代碼又方便但是不是亂七八糟的放一大堆,細節(jié)會有很多具體可以看視頻講解;
  • 我們中間肯定還需要邏輯層的BaseActivity,這樣做其實有利于后期的版本迭代、層次抽離和代碼重構(gòu)…

到了這里,關(guān)于Android模板設(shè)計模式之 - 構(gòu)建整個應用的BaseActivity的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 23種設(shè)計模式-仲裁者模式(Android應用場景介紹)

    仲裁者模式 是一種行為設(shè)計模式,它允許將對象間的通信集中到一個中介對象中,以減少對象之間的耦合度。本文將通過Java語言實現(xiàn)仲裁者模式,并介紹如何在安卓開發(fā)中使用該模式。 實現(xiàn)仲裁者模式 我們將使用一個簡單的例子來說明仲裁者模式的實現(xiàn),假設(shè)我們有三個類

    2023年04月14日
    瀏覽(40)
  • 23種設(shè)計模式-備忘錄模式(Android應用場景介紹)

    備忘錄模式 是一種行為型設(shè)計模式,它允許在不破壞封裝性的前提下捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài)。這樣以后就可以將該對象恢復到原先保存的狀態(tài)。 備忘錄模式通常包括三個角色:原發(fā)器(Originator)、備忘錄(Memento)和負責人(Caretaker)。原發(fā)

    2023年04月16日
    瀏覽(22)
  • JAVA8-lambda表達式8:在設(shè)計模式-模板方法中的應用

    JAVA8-lambda表達式1:什么是lambda表達式 JAVA8-lambda表達式2:常用的集合類api JAVA8-lambda表達式3:并行流,提升效率的利器? JAVA8-lambda表達式4:Optional用法 java8-lambda表達式5:toMap引發(fā)的線上故障 JAVA8-lambda表達式6:重構(gòu)和定制收集器 JAVA8-lambda表達式7:重要的函數(shù)接口 最近在公司

    2024年02月14日
    瀏覽(29)
  • 設(shè)計模式--模板模式

    1.1抽象類 1.2繼承模板類 1.3使用

    2024年02月03日
    瀏覽(22)
  • 設(shè)計模式—模板方法模式

    設(shè)計模式—模板方法模式

    定義一個操作的流程框架,而將流程中一些步驟延遲到子類中實現(xiàn)。使得子類在不改變流程結(jié)構(gòu)的情況下,重新定義流程中的特定步驟。 主要角色: 抽象類: 負責給出操作流程的輪廓或框架,由模板方法和若干基本方法組成。 ? 1、抽象方法:由抽象類聲明,在具體子類中實

    2024年02月10日
    瀏覽(16)
  • 設(shè)計模式---模板方法模式

    ? ? ? ? 所謂模板方法模式,就是提供一種方法的模板來實現(xiàn)一種規(guī)范,其他人可以利用這個模板定義自己的邏輯。 ? ? ? ? 在Java編程中的應用,主要就是通過接口或者抽象類來實現(xiàn)的,抽象類中可以把邏輯函數(shù)聲明為final類型,表示不能被重寫,即不能改變邏輯。在接口中

    2024年04月24日
    瀏覽(20)
  • 【設(shè)計模式】模板方法模式

    模板方法模式:定義一個操作中的算法骨架(父類),而將一些步驟延遲到子類中。 模板方法使得子類可以不改變一個算法的結(jié)構(gòu)來重定義該算法的 實現(xiàn)一些操作時,整體步驟很固定,但是呢。就是其中一小部分需要改變,這時候可以使用模板方法模式,將容易變的部分抽

    2024年02月08日
    瀏覽(22)
  • 設(shè)計模式——模板方法模式

    模板方法模式(Template Method Pattern)是一種行為型設(shè)計模式,它在抽象類中定義了一個算法的框架,并將一些步驟延遲到子類中實現(xiàn)。這種模式使得子類可以在不改變算法結(jié)構(gòu)的情況下重寫算法中的某些特定步驟。 抽象模板類(Abstract Template Class): 定義一個操作中的算法骨架

    2024年01月17日
    瀏覽(32)
  • Java設(shè)計模式 (一) 模板方法設(shè)計模式

    什么是模板方法設(shè)計模式? 模板方法設(shè)計模式是一種行為型設(shè)計模式,它定義了一個算法的骨架,并將一些步驟的具體實現(xiàn)延遲到子類中。模板方法模式可以幫助確保在算法的不同部分中保持一致性,同時也允許子類根據(jù)需要進行具體實現(xiàn)。 模板方法模式的關(guān)鍵特點包括:

    2024年02月12日
    瀏覽(21)
  • 設(shè)計模式(13):模板方法模式

    實現(xiàn)一個功能時,整體步驟很固定,但是,某些部分易變。易變部分可以抽象出來,供子類實現(xiàn)。 非常繁瑣,各個框架,類庫中都有它的影子,比如常見的有: 數(shù)據(jù)庫訪問的封裝 Junit單元測試 servlet中關(guān)于doGet/doPost方法調(diào)用 spring框架中各種Template shire中權(quán)限認證和授權(quán)都用到

    2024年04月16日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包