Android 安卓MVC架构

引入

本篇文章Github有提交 https://github.com/NorthernBrain/MVC

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。


推荐文章

安卓MVP架构 https://blog.csdn.net/qq_40881680/article/details/89944125


原理

控制器(Controller)- 负责转发请求,对请求进行处理。
视图(View) - 界面设计人员进行图形界面设计。
模型(Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。
在这里插入图片描述

我的理解

在安卓中,MVC架构模式,当用户点击屏幕有数据交互的时候(比如说,请求网络、解析操作等),此时,首先会调用控制器(Controller)中的方法,让它负责转发到模型(Model),让模型中的功能或者是算法执行,之后模型(Model)执行完毕,此时控制器(Controller)就要调用实现的接口,把数据返回给视图(View)。看看我写的demo例子吧!

我的Demo

在这里插入图片描述
我首先写的是一个Bean类,也就是模拟的数据,之后就要实现可以更新数据的这一层(模型),所以呢,在这一层写入了增加和删除,以及查找方法。之后就是控制器,控制器的职责上述也说了,负责转发请求,对用户的请求进行处理,里面写入了调用模型(Model)的方法,并且实现了回调接口(方便View更新数据),如果模型层,执行完毕之后,紧接着就是控制器调用接口通知给用户,然后View完成更新操作。


第一步Bean

package com.lkdot.mvc.bean;

/**
 * Bean类
 */
public class PeopleBean {
    private String name;
    private int number;

    public PeopleBean() {
    }

    public PeopleBean(String name, int number) {
        this.name = name;
        this.number = number;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    @Override
    public String toString() {
        return "PeopleBean{" +
                "name='" + name + '\'' +
                ", number=" + number +
                '}';
    }
}


第二步Modle

package com.lkdot.mvc.modle;

import com.lkdot.mvc.bean.PeopleBean;

public class PeopleModle {

    private static PeopleBean peopleBean = new PeopleBean();

    static {
        peopleBean.setName("NorthernBrain");
        peopleBean.setNumber(1);
    }

    /**
     * 添加数量
     */
    public void addNumber() {
        peopleBean.setNumber(peopleBean.getNumber() + 1);
    }

    /**
     * 减少数量
     */
    public void reduceNumber() {
        peopleBean.setNumber(peopleBean.getNumber() - 1);
    }

    public String selectData(){
        return peopleBean.toString();
    }
}

第三步Controller

package com.lkdot.mvc.controller;

import com.lkdot.mvc.modle.PeopleModle;

public class PeopleControler {
    private PeopleModle peopleModle;

    public PeopleControler() {
        peopleModle = new PeopleModle();
    }

    /**
     * 增加数量
     */
    public void addNumber(addListener addListener) {
        peopleModle.addNumber();
        addListener.addOK(peopleModle.selectData());
    }


    /**
     * 减少数量
     */
    public void reduceNumber(reduceListener reduceListener) {
        peopleModle.reduceNumber();
        reduceListener.reduceOK(peopleModle.selectData());
    }

    public interface addListener {
        void addOK(String str);
    }

    public interface reduceListener {
        void reduceOK(String str);
    }

}


第四步完成View

package com.lkdot.mvc;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.lkdot.mvc.controller.PeopleControler;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private TextView text;
    private Button add;
    private Button reduce;

    private PeopleControler peopleControler;


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

        peopleControler = new PeopleControler();
    }

    private void initView() {
        text = (TextView) findViewById(R.id.text);
        text.setText("null");
        add = (Button) findViewById(R.id.add);
        reduce = (Button) findViewById(R.id.reduce);

        add.setOnClickListener(this);
        reduce.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.add:
                peopleControler.addNumber(new PeopleControler.addListener(){
                    @Override
                    public void addOK(String str) {
                        text.setText(str);
                    }
                });
                break;
            case R.id.reduce:
                peopleControler.reduceNumber(new PeopleControler.reduceListener() {
                    @Override
                    public void reduceOK(String str) {
                        text.setText(str);
                    }
                });
                break;
        }
    }
}

本篇文章Github有提交 https://github.com/NorthernBrain/MVC

发布了88 篇原创文章 · 获赞 825 · 访问量 68万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 护眼 设计师: 闪电赇

分享到微信朋友圈

×

扫一扫,手机浏览