8.3.1、一个简单的MVC框架

大纲:0.0、android学习笔记_大纲

源码地址:https://github.com/ldy1993/ToolforAS.git

MVC框架

  • Model(模型)表示应用程序核心(比如数据库记录列表)。
  • View(视图)显示数据(数据库记录)。
  • Controller(控制器)处理输入(写入数据库记录)

我们先新建一个这样目录结构

在controller中创建一个抽象类的controller

控制器往往就是,开始--执行--结束流程

/**
 * Controller 抽象类定义
 * 
 * @author ldy
 * 
 */
public abstract class AController {
    /**
     * 子类构造方法必须调用super设置ActionStartListener
     * @param listener {@link ControllerStartListener}
     */
    public AController(ControllerStartListener listener) {
        this.startListener = listener;
    }

    /**
     * Controller结束监听器
     * @author ldy
     */
    private ControllerStartListener startListener;
    public interface ControllerStartListener {
        void onStart(AController controller);
    }
    /**
     * Controller结束监听器
     * @author ldy
     */
    private ControllerEndListener endListener;
    public interface ControllerEndListener {
        void onEnd(AController controller, ControllerResult result);
    }
    public void setEndListener(ControllerEndListener listener) {
        this.endListener = listener;
    }


    /**
     * Controller的具体处理方法
     */
    protected abstract void process();

    /**
     * 执行Controller之前需要先设置{@link ControllerEndListener},
     * 此接口内部先调用{@link ControllerStartListener#onStart(AController)} ,
     * 再调用{@link AController#process}
     */
    public void execute() {
        if (startListener != null) {
            startListener.onStart(this);
        }
        process();
    }


    /**
     * 设置Controller结果, 次接口内部调用{@link ControllerEndListener#onEnd(AController, ControllerResult)}方法
     * @param result {@link ControllerResult}
     */
    public void setResult(ControllerResult result) {
        if (endListener != null) {
            endListener.onEnd(this, result);
        }
    }
}

然后我们创建他的实例。比如我现在有个需求功能,需要展示sdcard列表,可以选择中一个文件,然后这个文件会返回名称给调用者。

如下

然后在model中创建ControllerResult 用存储结果数据

public class ControllerResult {
    /**
     * 返回结果(为 -1000 时显示detailMessage)
     */
    int ret;
    /**
     * 返回数据
     */
    Object data;
    /** 返回结果详细信息(一般为服务器响应后抛出的异常信息,显示时以服务器给的信息为准) **/
    String detailMessage;
    public ControllerResult(int ret, Object data, String message) {
        this.ret = ret;
        this.data = data;
        this.detailMessage = message;
    }
}

然后我们就可以在view中进行调用。

@MenuActivity(menu = MenuEnum.常用框架主菜单,sonMenu = SonMenuEnum.MVC框架)
public class MVCActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mvc);
        ControllerListSdcard controllerListSdcard=new ControllerListSdcard(new AController.ControllerStartListener() {
            @Override
            public void onStart(AController controller) {

            }
        });
        controllerListSdcard.setEndListener(new AController.ControllerEndListener() {
            @Override
            public void onEnd(AController controller, ControllerResult result) {

            }
        });
        controllerListSdcard.execute();
    }
}

目录结构变成

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值