Android三大设计模式之一------------------MVC设计模式


对于安卓设计模式的理解,我感觉还不透彻,但是本着要总结一下,进步自己的信心,决定要一系列的把这些总结一下,可能很多人都说mvc这种都过时,为什么还要总结,现在那么流行的mvp不多写写,其实mvc用处还是蛮大的,先总结一下吧,

mvc顾名思义model view controller即模型,视图,控制器。一种典型的三层接口设计模式,下面直接引用百度百科的图片,



根据上图可以很清晰的看出啊,这是一个四层交互,可能有人问,还有一层在哪,那就是这个用户啊,这四个完美的连接成一个逻辑循环,

这是一个MVC的demo,是利用智能机器人做的一个基于MVC的设计模式

效果如图:




下面直接看代码里面的应用:

c:即controller,为控制器,主要是实现读取用户输入的内容,然后控制model进行数据交互。

代码在activity中,为

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = (EditText) findViewById(R.id.edit_seach);
        recyclerView = (RecyclerView) findViewById(R.id.recyclerview);

    }

    @Override
    public void onClick(View view) {
        if (view.getId() == R.id.btn_seachach){
            String title = editText.getText().toString();
            searchModel(title);
            mDatas.add("" + title);
        }
    }


m:即为model,接收到从controller中传递过来的用户反馈,然后去处理数据并且将这些数据返回给view层。

 private void searchModel(final String title){
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                   
                    String url = "http://apis.haoservice.com/efficient/robot";
                    OkHttpClient okHttpClient = new OkHttpClient();
                    String json = "{'key':'b430813960cd4a77be704a9e4e237246','info':'" + title +"','format':'json'}";
                    RequestBody formBody = new FormBody.Builder().add("key", "b430813960cd4a77be704a9e4e237246")
                            .add("info", "" + title)
                            .add("format", "json")
                            .build();
                    Request request = new Request.Builder().url(url).post(formBody).build();
                    okhttp3.Response response = okHttpClient.newCall(request).execute();
                    Log.i("ssssssssssssssssss","sssss");
                    String str = response.body().string();
                    Log.i("ssssssssssssssssss","-------"+str);
                    Gson gson = new Gson();
                    News news = gson.fromJson(str,News.class);
                    mDatas.add(news.result.text);

                    Message message = Message.obtain();
                    message .arg1 = 1;
                    MainActivity.this.myHandler.sendMessage(message);

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

v:vie层,该层通过Handler来返回处理返回的数据,适配到recyclerview中去
 Handler myHandler = new Handler() {
        public void handleMessage(Message msg) {
            updataUI();
        }
    };
    
    private void updataUI(){

        mAdapter = new HomeAdapter();
        recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
        recyclerView.setAdapter(mAdapter);


    }

class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder>
{

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {
        MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
                MainActivity.this).inflate(R.layout.item_home, parent,
                false));
        return holder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position)
    {
        holder.tv.setText(mDatas.get(position));
    }

    @Override
    public int getItemCount()
    {
        return mDatas != null ? mDatas.size() : 0;
    }

    class MyViewHolder extends RecyclerView.ViewHolder
    {

        TextView tv;

        public MyViewHolder(View view)
        {
            super(view);
            tv = (TextView) view.findViewById(R.id.tvName);
        }
    }
}
布局的XML文件
也是属于view层的;

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.mytestmvc.MainActivity">

    <LinearLayout
        android:id="@+id/search"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
    <Button
        android:id="@+id/btn_seachach"
        android:onClick="onClick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发送"/>
        <EditText
            android:id="@+id/edit_seach"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_below="@+id/search"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </android.support.v7.widget.RecyclerView>

</RelativeLayout>
item_home.xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_margin="5dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/tvName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#bbb"
        android:gravity="center"
        android:text="A"/>
</LinearLayout>
该demo是典型的mvc模式构建的项目方法

使用mvc构建项目的好处还是比比较明显的

1.耦合度,使用MVC可以做的大程度的解耦,,代码耦合度低是很好的,方便开发,更改,项目清晰

2.复用,复用是编写代码里很重要的一节,MVC能做到大幅度的复用,快速开发,后期修改都是很简单的

其实现阶段来说,对于开发Android,mvc是比较好理解的,很清晰的项目结构,适合新手开发者,但是对于项目来说,还是有很大的缺点的,

现在开发的后台大多使用mvc模式来开发,但是mvc对于android端,我是不推荐的,因为他逻辑不够清晰,对代码来说还是比较笨重,但是从另外一个方面来说,包括另外几种框架,mvp,mvvm,都可以看成是mvc模式的变种,我个人是这样觉得的,这样来开是从mvc升级过来了,还是先理解mvc的模式,才能更快速的利用其他的设计模式

源码下载地址:http://download.csdn.net/detail/abcwang1234/9615558






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值