Android开发经验谈Android技术知识Android开发

架构设计----MVC初步认识

2018-05-14  本文已影响34人  pgydbh

目录

目录.png

什么是MVC

view ---- xml
model ---- 存放数据和对于数据的操作的类
controller ---- 存放数据与页面逻辑的类 比如 Activity Fragment

MVC结构

结构.png

MVC流程

C拥有M的句柄,逻辑全部由C控制

demo

github地址:https://github.com/pgyCode/MvcDemo

核心代码

Contract
public interface BookContract {

    interface Model{
        //模拟初始化
        List<String> init();
        //模拟添加
        void add(String str);
    }

    interface Controller{
        void init();
        void add(String str);
    }
}
Model
public class BookModel implements BookContract.Model {

    //使用单例模式,防止出现多份数据
    private static Object object = new Object();
    public static BookModel instance;
    public static BookModel getInstance() {
        synchronized (object){
            if (instance == null)
                return new BookModel();
            else
                return instance;
        }
    }

    public List<String> strings = null;

    @Override
    public List<String> init() {
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        strings = new LinkedList<>();
        strings.add("1");
        strings.add("2");
        strings.add("3");
        strings.add("4");
        strings.add("5");
        strings.add("6");
        strings.add("7");
        strings.add("8");
        return strings;
    }

    @Override
    public void add(String str) {
        strings.add(str);
    }
}
Controller
public class BookActivity extends AppCompatActivity implements BookContract.Controller {

    private BookContract.Model model;

    private ListView lst;
    private BookAdapter bookAdapter;

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

        model = BookModel.getInstance();
        lst = findViewById(R.id.lst);
        init();

        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                add("测试添加");
            }
        });
    }

    @Override
    public void init() {
        new AsyncTask<Void, Void, List<String>>(){

            @Override
            protected List<String> doInBackground(Void... voids) {
                return model.init();
            }

            @Override
            protected void onPostExecute(List<String> strings) {
                super.onPostExecute(strings);
                bookAdapter = new BookAdapter(BookActivity.this, strings);
                lst.setAdapter(bookAdapter);
            }
        }.execute();
    }

    @Override
    public void add(final String str) {
        new AsyncTask<Void, Void, Void>(){

            @Override
            protected Void doInBackground(Void... voids) {
                 model.add(str);
                 return null;
            }

            @Override
            protected void onPostExecute(Void avoid) {
                super.onPostExecute(avoid);
                bookAdapter.notifyDataSetChanged();
            }
        }.execute();
    }
}
上一篇下一篇

猜你喜欢

热点阅读