Android中的MVC模式理解

MVC概述:

MVC模式的结构分为三部分,实体层的Model,视图层的View,以及控制层的Controller。

(1)其中View层其实就是程序的UI界面,用于向用户展示数据以及接收用户的输入。

(2)而Model层就是JavaBean实体类,用于保存实例数据。

(3)Controller控制器用于更新UI界面和数据实例。看图


例如,View层接受用户的输入,然后通过Controller修改对应的Model实例;同时,当Model实例的数据发生变化的时候,需要修改UI界面,可以通过Controller更新界面。(View层也可以直接更新Model实例的数据,而不用每次都通过Controller,这样对于一些简单的数据更新工作会变得方便许多。)

举个简单的例子,现在要实现一个飘雪的动态壁纸,可以给雪花定义一个实体类Snow,里面存放XY轴坐标数据,View层当然就是SurfaceView(或者其他视图),为了实现雪花飘的效果,可以启动一个后台线程,在线程里不断更新Snow实例里的坐标值,这部分就是Controller的工作了,Controller里还要定时更新SurfaceView上面的雪花。进一步的话,可以在SurfaceView上监听用户的点击,如果用户点击,只通过Controller对触摸点周围的Snow的坐标值进行调整,从而实现雪花在用户点击后出现弹开等效果。

看代码:

model uesr类

public class Uesr {
    private String name ;
    private String age ;

    public String getName() {
        return name;
    }

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

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}
view MainActivity

public class MainActivity extends Activity {
    public EditText nameEd , ageEd ;
    public Button but1 , but2  ;
    public UesrHelp help ;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_layout);
        nameEd = (EditText) findViewById( R.id.name);
        ageEd = (EditText) findViewById( R.id.age);
        but1 = (Button) findViewById( R.id.but1);
        but2 = (Button) findViewById( R.id.but2);
        help = new UesrHelp(this);
        but1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                help.setUersName( nameEd.getText().toString());
                help.setUesrAge(ageEd.getText().toString());
                nameEd.setText("");
                ageEd.setText("");
            }
        });
        but2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                help.getUesrName();
                help.getUesrAge();
            }
        });
    }
}
Controller UesrHelp

public class UesrHelp {

    private Uesr uesr;
    private MainActivity context;

    public UesrHelp(Context context){
        this.context = (MainActivity) context;
        uesr = new Uesr();
    }

    public void setUersName( String name){
        uesr.setName( name );
    }

    public void setUesrAge( String age ){
        uesr.setAge( age );
    }

    public void getUesrName(){
        context.nameEd.setText(uesr.getName() );
    }

    public void getUesrAge(){
        context.ageEd.setText(uesr.getAge() );
    }
    
    private Uesr getUesr(){
        return uesr ;
    }
}
view 也可以直接修改Uesr的属性,修改一下MainActivity和就可以了:

public class MainActivity extends Activity {
    public EditText nameEd , ageEd ;
    public Button but1 , but2  ;
    public UesrHelp help ;
    private Uesr uesr ;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_layout);
        nameEd = (EditText) findViewById( R.id.name);
        ageEd = (EditText) findViewById( R.id.age);
        but1 = (Button) findViewById( R.id.but1);
        but2 = (Button) findViewById( R.id.but2);
        help = new UesrHelp(this);
        but1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                help.setUersName( nameEd.getText().toString());
                help.setUesrAge(ageEd.getText().toString());
                nameEd.setText("");
                ageEd.setText("");
            }
        });
        but2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                uesr = help.getUesr();
                uesr.setName( nameEd.getText().toString());
                uesr.setAge( ageEd.getText().toString());
            }
        });
    }
}
以上就是小样对MVC的理解,不足之处请多指教。MVC是一种编程思想,只有时常使用,才能更好的理解。










猜你喜欢

转载自blog.csdn.net/xiaol206/article/details/72058058