MVP 新姿勢,記錄一下

MVP 全稱:Model-View-Presenter。主要邏輯如下:
View。也就是Android中的Activity。同時需要創(chuàng)建一個View的抽象接口View interface。需要View實現(xiàn)的接口,View通過View interface與Presenter進行交互,降低耦合。
Model。用來操做實際數(shù)據(jù)(譬如數(shù)據(jù)存儲等)。有時也需要創(chuàng)建一個Model的抽象接口Model interface用來降低耦合。
Presenter。作為View與Model交互的中間紐帶,處理與用戶交互的負責邏輯。
優(yōu)點如下:(1)降低耦合度
(2)模塊職責劃分明顯
(3)利于測試驅(qū)動開發(fā)
(4)代碼復用
(5)隱藏數(shù)據(jù)
(6)代碼靈活性
缺點: 需要增加很多類。

但是相比優(yōu)點而言,缺點可以忽略。

具體的demo代碼如下:

public  class MainActivity extends Activity implements IUserView, OnClickListener {

        private TextView showView;
        private EditText username_et;
        private EditText password_et;
        private Button login_btn;
        private Button getuserinfo_btn;
        private Presenter pre;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            bindView();
            setListener();
        }

        private void setListener() {
            login_btn.setOnClickListener(this);
            getuserinfo_btn.setOnClickListener(this);
        }

        private void bindView() {
            showView = (TextView) this.findViewById(id.showView);
            username_et = (EditText) this.findViewById(id.username_et);
            password_et = (EditText) this.findViewById(id.password_et);
            login_btn = (Button) this.findViewById(id.login_btn);
            getuserinfo_btn = (Button) this.findViewById(id.getuserinfo_btn);
            pre = new Presenter(this);
        }

        @Override
        public void setUser(UserInfo info) {
            showView.setText("用戶名為:" + info.getUsername() + ",密碼為:"
                    + info.getPassword());
        }

        @Override
        public UserInfo getUser() {
            UserInfo info = new UserInfo();
            String password = password_et.getText().toString().trim();
            String username = username_et.getText().toString().trim();
            if (TextUtils.isEmpty(username)) {
                toast("用戶名不能為空");
                return null;
            }
            if (TextUtils.isEmpty(password)) {
                toast("密碼不能為空");
                return null;
            }

            info.setPassword(password);
            info.setUsername(username);
            return info;
        }

        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.login_btn:
                    pre.saveInfo(getUser());
                    break;
                case id.getuserinfo_btn:
                    pre.getUserInfo();
                    break;
                default:
                    break;
            }
        }

        private void toast(String msg) {
            Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
        }

    }

實體bean:

 public class UserInfo {
        private String username;
        private String password;
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        @Override
        public String toString() {
// TODO Auto-generated method stub
            return username + ":" + password;
        }
    }

Model 抽象層

 public interface UserModel {
        public UserInfo getUserInfo();
        public void setUserInfo(UserInfo info);
    }

Model具體實現(xiàn)層:

 public class UserModelImp implements UserModel {
        UserInfo info = new UserInfo();
        @Override
        public UserInfo getUserInfo() {
            return info;
        }
        @Override
        public void setUserInfo(UserInfo info) {
            this.info = info;
        }
    }

數(shù)據(jù)交互實現(xiàn)層:

 public class Presenter {
        private UserModel userModel;
        private IUserView IuserView;
        public Presenter(IUserView userView) {
            this.IuserView = userView;
            userModel = new UserModelImp();
        }
        public void saveInfo(UserInfo info) {
            userModel.setUserInfo(info);
        }
        public void getUserInfo() {
            IuserView.setUser(userModel.getUserInfo());
        }
    }

View數(shù)據(jù)抽象層:

public interface IUserView {
        public void setUser(UserInfo info);
        public UserInfo getUser();
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容