这样,我们使用和分别将登录/注册操作和结果回调操作进行封装,然后使IView、、分别实现自己应该具有的功能,最后让View、、Model分别实现IView、、接口,一步一步实现了视图与数据的解耦 。
代码实现
以上是理论分析部分,落实在代码中,我来大家一步一步地实现:
首先定义我们所说的登录/注册操作对应的接口:
enum RequestType { LOGIN, SIGNUP }class LoginInterface {//这里通过RequestType区分当前操作是登录操作还是注册操作logInOrSignUp(String userName, String passWord, RequestType requestType) {}}
然后来定义回调方法对应的接口:
class ILoginCallBack {//登录/注册成功logInOrSignUpSuccess(User user, String describe) {}//登录/注册失败logInOrSignUpFailed(String describe) {}}
然后来定义IView接口,因为View应该有登录/注册、回调两个功能,因此应该让IView接口实现、两个接口:
class ILoginPage implements LoginInterface,ILoginCallBack {showProsess(bool show) {}@overridelogInOrSignUp(String userName, String passWord, RequestType requestType) {// TODO: implement logInOrSignUpreturn null;}@overridelogInOrSignUpFailed(String describe) {// TODO: implement logInOrSignUpFailedreturn null;}@overridelogInOrSignUpSuccess(User user, String describe) {// TODO: implement logInOrSignUpSuccessreturn null;}}
注意,这里只是定义接口,所以方法不用实现 。
定义接口,由于应该有登录/注册、回调两个功能,因此应该让IView接口实现、两个接口:
class ILoginPagePresenter implements LoginInterface, ILoginCallBack {@overridelogInOrSignUp(String userName, String passWord, RequestType requestType) {// TODO: implement logInOrSignUpreturn null;}@overridelogInOrSignUpFailed(String describe) {// TODO: implement logInOrSignUpFailedreturn null;}@overridelogInOrSignUpSuccess(User user, String describe) {// TODO: implement logInOrSignUpSuccessreturn null;}}
最后定义接口,其只需要登录/注册一个功能即可,因此让接口实现这一个接口即可:
class ILoginModel implements LoginInterface {@overridelogInOrSignUp(String userName, String passWord, RequestType requestType) {// TODO: implement logInOrSignUpreturn null;}}
然后我们来实现View、、Model三个类:
View:
class _LoginState extends State
:
class LogInPresenter implements ILoginPagePresenter {ILoginPage _iLoginPage;ILoginModel _iLoginModel;LogInPresenter(this._iLoginPage) {_iLoginModel = LoginModel(this);}@overridelogInOrSignUp(String userName, String passWord, RequestType requestType) {_iLoginModel.logInOrSignUp(userName, passWord, requestType);}@overridelogInOrSignUpFailed(String describe) {_iLoginPage.logInOrSignUpFailed(describe);}@overridelogInOrSignUpSuccess(User user, String describe) {_iLoginPage.logInOrSignUpSuccess(user, describe);}}
Model:
class LoginModel implements ILoginModel {ILoginCallBack _iLoginCallBack;LoginModel(this._iLoginCallBack);@overridelogInOrSignUp(String userName, String passWord, RequestType requestType) {// TODO: 发起网络操作进行登录/注册_iLoginCallBack.logInOrSignUpSuccess(user, describe);}}
- 松灵机器人SCOUT的ROS代码架构
- 《大数据+AI在大健康领域中最佳实践前瞻》
- 360搜索:支撑百亿级网页搜索引擎的架构!
- 互链学院 | 高承实:数字法币是区块链架构中的血液和灵魂
- 三 交易系统架构演进之路:微服务化
- 高并发系统架构设计之实战篇35:计数系统设计之未读数系统
- TOR Calico BGP搭建
- Spine-Leaf 数据中心网络设计- 叶脊网络架构
- 以下是完整的Kubernetes架构师课程教学大纲,包括实验和参考资料
- 全 Tumblr 150亿月浏览量背后的架构挑战