MVP模式实例

来源:互联网 发布:数控编程招聘的视频 编辑:程序博客网 时间:2024/05/17 13:11

MVP核心思想:mvp把视图层中UI逻辑抽象成View接口 把业务逻辑抽象成Presenter Model还是原来的Model。

实例使用弱引用来防止内存泄漏。
Model类

public class GirlModelImlV1  implements  IGirlModel {    Handler handler=new Handler(Looper.getMainLooper());    @Override    public void loadGirl(final GirlOnLoadlitener girlOnLoadlitener) {        new Thread()        {            @Override            public void run() {                try {                    sleep(3000);                } catch (InterruptedException e) {                    e.printStackTrace();                }                final List<Girl> data = new ArrayList<Girl>();                data.add();                handler.post(new Runnable() {                    @Override                    public void run() {                        //回调                        girlOnLoadlitener.onComplete(data);                    }                });            }        }.start();    }}
/** * 监听数据返回 */public interface IGirlModel {    void loadGirl(GirlOnLoadlitener girlOnLoadlitener);    interface  GirlOnLoadlitener    {        void  onComplete(List<Girl> girls);    }}

Present类

/** * T  对应着Activity 的UI抽象接口  视图 */public abstract class BasePersenter<T> {    /**     * 持有UI接口的弱引用     */    protected WeakReference<T> mViewRef;    /**     * 获取数据方法     */    public abstract void fectch();    public void attachView(T view) {        mViewRef = new WeakReference<T>(view);    }    /**     * 解绑     */    public void detach()    {        if(mViewRef!=null)        {            mViewRef.clear();            mViewRef=null;        }    }}
public class GirlPresentV1<T>  extends  BasePersenter<IGrilView> {    /**     * 持有视图层 UI接口的引用  此时的视图层Activity     */    IGrilView mGrilView;    public GirlPresentV1(IGrilView mGrilView) {        this.mGrilView = mGrilView;    }    /**     * 持有模型Model的引用     */    IGirlModel girlModel=new GirlModelImlV1();    @Override    public  void fectch()    {        mGrilView.showLoading();        if(girlModel!=null)        {            /**             * 参数为数据回调监听             */            girlModel.loadGirl(new IGirlModel.GirlOnLoadlitener() {                @Override                public void onComplete(List<Girl> girls) {                    //回调视图层                    mGrilView.showGrils(girls);                }            });        }    }}

View类

public interface IGrilView {    /**     * UI业务逻辑   加载进度条     */    void showLoading();    void showGrils(List<Girl> grils);}
/** * V  IGrilView接口 */public abstract  class BaseActivty<V,T extends BasePersenter<V>> extends Activity {    protected  T mPresent;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        mPresent=createPresent();        mPresent.attachView((V) this);    }    @Override    protected void onDestroy() {        mPresent.detach();        super.onDestroy();    }    /**     * 子类实现具体的构建过程     * @return     */    protected abstract T createPresent() ;}
/** * 属于视图层 * View */public class MainActivity extends BaseActivty<IGrilView,GirlPresentV1<IGrilView>> implements IGrilView{    private ListView listView;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main_v1);        listView= (ListView) findViewById(R.id.listview);        mPresent.fectch();    }    @Override    public void showLoading() {        Toast.makeText(this,"正在拼命加载",Toast.LENGTH_SHORT).show();    }    @Override    public void showGrils(List<Girl> grils) {        listView.setAdapter(new GirlListAdapter(this,grils));    }    @Override    protected GirlPresentV1<IGrilView> createPresent() {        return new GirlPresentV1<>(this);    }}
原创粉丝点击