日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

android activity解耦,Android与设计模式:用单一职责原则为Activity解耦

發(fā)布時間:2023/12/4 Android 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android activity解耦,Android与设计模式:用单一职责原则为Activity解耦 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、什么是單一職責(zé)原則單一職責(zé)原則(SRP:Single responsibility principle)又稱單一功能原則,其定義為:一個類,應(yīng)該只有一個可以導(dǎo)致變化的原因。光看概念

一、什么是單一職責(zé)原則

單一職責(zé)原則(SRP:Single responsibility principle)又稱單一功能原則,其定義為:一個類,應(yīng)該只有一個可以導(dǎo)致變化的原因。光看概念會讓人很頭疼,我先講點(diǎn)小例子吧:

二、單一職責(zé)原則能解決什么問題

回顧我們的 Android 開發(fā)經(jīng)歷,很多人都會發(fā)現(xiàn) Activity 類中的代碼總會不知不覺地變得很多,這會讓讀我們代碼的人非常痛苦。而造成這種情況的其中一個原因是:Activity 中需要與用戶進(jìn)行大量的交互,用戶的操作會改變 Activity 當(dāng)前顯示的界面元素/對應(yīng)的信息,所以我們總會把 Model、View、點(diǎn)擊事件等等……操作全都放到了 Activiy 中,但這樣存在一個很嚴(yán)重的問題,無腦地為 Activity 添加代碼,勢必讓 Activity 變得臃腫,結(jié)構(gòu)混亂,職責(zé)模糊,特別是之前負(fù)責(zé)該項目的工程師已經(jīng)離職,新入職的工程師需要重構(gòu)該 Activity 時,必將痛不欲生。

那么我們要怎樣為 Activity 解耦呢?我先通過一個小 Demo 以單一職責(zé)原則的思想為 Activity 解耦,詳情如下:

{

private String btn1Str = "btn1 Clicked 1";

private String btn2Str = "btn2 Clicked 1";

private String btn3Str = "btn3 Clicked 1";

private String btn4Str = "btn4 Clicked 1";

public String getData(int index){

if(index == 1)

return btn1Str;

else if(index == 2)

return btn2Str;

else if(index == 3)

return btn3Str;

else

return btn4Str;

}

(int index,String str){

if(index == 1)

btn1Str = str;

else if(index == 2)

btn2Str = str;

else if(index == 3)

btn3Str = str;

else

btn4Str = str;

}

}

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

{

private Button btn1;

private Button btn2;

private Button btn3;

private Button btn4;

private Data data = new Data();

(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

btn1 = (Button)findViewById(R.id.button1);

btn2 = (Button)findViewById(R.id.button2);

btn3 = (Button)findViewById(R.id.button3);

btn4 = (Button)findViewById(R.id.button4);

btn1.setOnClickListener(this);

btn2.setOnClickListener(this);

btn3.setOnClickListener(this);

btn4.setOnClickListener(this);

}

(){

//各種網(wǎng)絡(luò)請求操作更新數(shù)據(jù)

}

(View v) {

switch(v.getId()){

case R.id.button1:

btn1.setText(data.getData(1));

break;

case R.id.button2:

btn2.setText(data.getData(2));

break;

case R.id.button3:

btn3.setText(data.getData(3));

break;

case R.id.button4:

btn4.setText(data.getData(4));

break;

}

}

}

在 Demo 里我們可以看到,所有相關(guān)的操作都在 Activity 里進(jìn)行,要知道,這還只是一個非常簡單的頁面,可以說完全不存在業(yè)務(wù)邏輯。換成一個業(yè)務(wù)邏輯復(fù)雜的頁面,這還用玩?接下來換一個思路,用 MVP 模式解耦:

{

private Data data;

private IView iView;

public Presenter(IView iView) {

this.iView = iView;

data = new Data();

}

public Data getData(){

return data;

}

(int index,String str){

//各種網(wǎng)絡(luò)請求更新數(shù)據(jù)

data.setData(index, str);

updateView();

}

(){

iView.updateView(data);

}

}

{

(Data data);

}

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

,OnClickListener{

private Button btn1;

private Button btn2;

private Button btn3;

private Button btn4;

private Presenter presenter;

private Data data = new Data();

(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

btn1 = (Button)findViewById(R.id.button1);

btn2 = (Button)findViewById(R.id.button2);

btn3 = (Button)findViewById(R.id.button3);

btn4 = (Button)findViewById(R.id.button4);

btn1.setOnClickListener(this);

btn2.setOnClickListener(this);

btn3.setOnClickListener(this);

btn4.setOnClickListener(this);

presenter = new Presenter(this);

}

(Data data) {

this.data = data;

}

(View v) {

switch(v.getId()){

case R.id.button1:

btn1.setText(data.getData(1));

break;

case R.id.button2:

btn2.setText(data.getData(2));

break;

case R.id.button3:

btn3.setText(data.getData(3));

break;

case R.id.button4:

btn4.setText(data.getData(4));

break;

}

}

}

進(jìn)行這樣的重構(gòu)之后,Activity 類發(fā)生了什么變化呢?我們先回想下 Android SDK 對 Activity 的定義吧:

總結(jié)

以上是生活随笔為你收集整理的android activity解耦,Android与设计模式:用单一职责原则为Activity解耦的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。