MVP模式实例

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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值