Android MVC模式

前言:其實在Android studio創(chuàng)建一個項目的模式也是一個簡化的mvc模式,不過activity中有太多太多的代碼,因為activity中包含了model層和controller層,下面詳細(xì)解析一下MVC模式,并用一個小例子帶大家去理解。

mvc模式.png

MVC模式介紹:

MVC是Model-View-Controller的簡稱
Model:模型層,負(fù)責(zé)處理數(shù)據(jù)的加載或者存儲
View:視圖層,負(fù)責(zé)界面數(shù)據(jù)的展示,與用戶進行交互
Controller:控制器層,負(fù)責(zé)邏輯業(yè)務(wù)的處理

MVC模式的特點:

1.耦合性低;
2.可擴展性好;
3.模塊職責(zé)劃分明確

MVC模式的不足:

XML文件作為視圖層,所做的事情比較有限,所以Activity作為Controller同時也承擔(dān)了一部分的View視圖顯示工作,導(dǎo)致Activity代碼龐大,維護困難

接下來就看一個非常簡單的小例子:

1.項目架構(gòu)


項目架構(gòu)

2.首先定義一個person的bean,這個都見多了,沒什么好說的

public class Person {

    private String username;

    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

3.定義一個回調(diào)接口 OnPersonListener,對應(yīng)的一個成功方法和失敗方法

public interface OnPersonListener {

    void onSuccess(Person person);

    void onFailure();

}

4.定義一個接口 PersonModle

public interface PersonModle {

    void Login(Person person,OnPersonListener onPersonListener);

}

4.定義一個實現(xiàn)類 PersonModelImpl,實現(xiàn)PersonModle接口,在方法中添加邏輯

public class PersonModelImpl implements PersonModle {

    //在此處寫相應(yīng)邏輯
    @Override
    public void Login(Person person, OnPersonListener onPersonListener) {

        if(person.getUsername().equals("123")&&person.getPassword().equals("123")){
            onPersonListener.onSuccess(person);
        }else {
            onPersonListener.onFailure();
        }

    }
}

5.再來看看activity中的代碼

public class MainActivity extends AppCompatActivity implements OnPersonListener,View.OnClickListener {

    private EditText et_username;

    private EditText et_password;

    private Button btn_login;

    private String username;

    private String password;

    private PersonModelImpl personModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        init();
        personModel = new PersonModelImpl();
    }

    //控件初始化
    private void init() {

        et_username = (EditText)findViewById(R.id.et_username);
        et_password = (EditText)findViewById(R.id.et_password);
        btn_login = (Button)findViewById(R.id.btn_login);
        btn_login.setOnClickListener(this);

    }


    @Override
    public void onClick(View v) {

        username = et_username.getText().toString();
        password = et_password.getText().toString();

        Person person = new Person();
        person.setUsername(username);
        person.setPassword(password);

        personModel.Login(person,this);


    }

    @Override
    public void onSuccess(Person person) {

        Toast.makeText(this, "登錄成功", Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onFailure() {
        Toast.makeText(this, "登錄失敗", Toast.LENGTH_SHORT).show();
    }
}

可以看到雖然邏輯非常簡單,但是哪一塊需要做什么事情是非常清晰的。但其實modle層和view層耦合性還是比較大的,在IOS中的MVC模式則不存在這個問題。所以其實Android最適合的模式是MVP模式,但是也要看具體項目吧,個人認(rèn)為MVP模式容易類爆炸,在網(wǎng)上有很多比MVC優(yōu)秀但比MVP簡單的模式,如果是個人擼的話就要快速開發(fā)嘛,可以去找找。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容