设计模式——MVC
来源:互联网 发布:局域网视频通话软件 编辑:程序博客网 时间:2024/06/06 14:43
MVC各层介绍
M层:对应实体模型和业务逻辑,比如数据库存取操作,网络操作,复杂的算法,耗时的任务都放在model层处理。
V层:对应于布局文件,将model层的数据呈现给用户。
C层:对应于Activity,处理用户交互问题,读取V层的数据,控制用户输入,向Model发送数据请求。
用户登录示例
效果图
项目目录如图
View层
View层的布局文件
<LinearLayout 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" android:gravity="center" android:orientation="vertical" > <EditText android:id="@+id/et_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="用户名" /> <EditText android:id="@+id/et_passwd" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="密码" android:password="true" /> <Button android:id="@+id/bt_login" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="登录" /></LinearLayout>
model层
model中的实体类UserEntity
package com.a.mvcdemo.model.entity;import java.io.Serializable;//MVC中的实体类public class UserEntity implements Serializable{ private String userName; private String passwd; public UserEntity(String userName, String passwd) { super(); this.userName = userName; this.passwd = passwd; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPasswd() { return passwd; } public void setPasswd(String passwd) { this.passwd = passwd; }}
model层的业务逻辑,这个示例中需要登录的业务逻辑。先定义一个接口:ILoginModel
package com.a.mvcdemo.model;import com.a.mvcdemo.listener.OnLoginListener;import com.a.mvcdemo.model.entity.UserEntity;//MVC中的业务逻辑public interface ILoginModel { /** * 登录 * @param user 用户bean * @param listener 登录回调监听接口 */ void Login(UserEntity user,OnLoginListener listener);}
登录成功与否需要一个监听回调接口:OnLoginListener
package com.a.mvcdemo.listener;import com.a.mvcdemo.model.entity.UserEntity;public interface OnLoginListener { /** * 登录成功 * @param user */ void onSuccess(UserEntity user); /** * 登录失败 */ void onFailed();}
ILoginModel接口的实现类:LoginModelImpl
package com.a.mvcdemo.model;import android.os.Handler;import com.a.mvcdemo.listener.OnLoginListener;import com.a.mvcdemo.model.entity.UserEntity;public class LoginModelImpl implements ILoginModel { private Handler myHandler = new Handler(); @Override public void Login(final UserEntity user, final OnLoginListener listener) { new Thread() { public void run() { try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //本地模拟验证 if (user.getUserName().equals("user") && user.getPasswd().equals("123")) { myHandler.post(new Runnable() { @Override public void run() { listener.onSuccess(user); } }); } else { myHandler.post(new Runnable() { @Override public void run() { listener.onFailed(); } }); } }; }.start(); }}
Controller层
LoginActivity,用户登录后需要通过Controller控制登录成功与否后的操作,所以LoginActivity要实现接口:OnLoginListener 。
package com.a.mvcdemo.view.activity;import com.a.mvcdemo.R;import com.a.mvcdemo.listener.OnLoginListener;import com.a.mvcdemo.model.ILoginModel;import com.a.mvcdemo.model.LoginModelImpl;import com.a.mvcdemo.model.entity.UserEntity;import android.support.v7.app.ActionBarActivity;import android.app.ProgressDialog;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;//MVC中的Controllerpublic class LoginActivity extends ActionBarActivity implements OnClickListener, OnLoginListener { private EditText et_name, et_passwd; private Button bt_login; private ILoginModel loginModel; private ProgressDialog progressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews();// 初始化view initDatas();// 初始化数据 initEvents();// 初始化事件 } private void initDatas() { loginModel = new LoginModelImpl(); progressDialog = new ProgressDialog(this); progressDialog.setTitle("加载中。。。"); } private void initEvents() { bt_login.setOnClickListener(this); } private void initViews() { et_name = (EditText) findViewById(R.id.et_name); et_passwd = (EditText) findViewById(R.id.et_passwd); bt_login = (Button) findViewById(R.id.bt_login); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.bt_login: UserEntity user = new UserEntity(et_name.getText().toString().trim(), et_passwd .getText().toString().trim()); showLoadingDialog(); loginModel.Login(user, this); break; } } // 登录成功时回调 @Override public void onSuccess(UserEntity user) { dismissLoadingDialog(); Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_SHORT).show(); } // 登录失败时回调 @Override public void onFailed() { dismissLoadingDialog(); Toast.makeText(LoginActivity.this, "登录失败", Toast.LENGTH_SHORT).show(); } // 显示加载对话框 private void showLoadingDialog() { progressDialog.show(); } // 取消加载对话框 private void dismissLoadingDialog() { progressDialog.dismiss(); }}
阅读全文
1 0
- 设计模式——MVC
- 设计模式——MVC
- 设计模式——MVC
- 复合设计模式—MVC
- 复合设计模式—MVC
- 设计模式——MVC模式
- 设计模式笔记——MVC模式
- Dot Net设计模式—MVC模式
- Dot Net设计模式—MVC模式
- Dot Net设计模式—MVC模式
- .net 设计模式—MVC模式
- 设计模式学习—MVC模式(MVC Design Pattern)
- 设计模式(1)—— MVC
- 设计模式——MVC架构
- 设计模式(1)—— MVC
- J2EE设计模式——MVC
- Android读书笔记—— MVC设计模式
- JSP的开发模式——MVC设计模式
- 贵在坚持
- 业界首部安卓热修复宝典出炉!你想知道的一切都在这里了
- asp.net core 1.1 dotnet 生成DbContext
- JS获取当前时间
- u-boot分析之 DDR配置
- 设计模式——MVC
- spring boot mybatis 加事务
- 【Linux】【Opencv】【Python】安装opencv以及无法使用cv2.imshow()解决办法(Ubuntu14.04)
- CSS图片倒角
- 算法与数据结构系列
- SingleTask启动模式与HOME键问题
- navicat for mysql创建连接,测试失败
- 支付宝支付流程
- web.xml中出现<servlet-name>default</servlet-name>是什么意思?