ExampleMVP.java
public interface ExampleMVP {
public interface PresenterOps {
// Presenter methods => View acess
void doSomething();
}
public interface ModelOps {
// Model methods => Presenter acess
void catchSomething();
}
public interface ReqPresenterOps {
// Presenter methods => Model acess
void returnSomething();
}
public interface ReqViewOps {
// View methods => Presenter acess
void showSomething();
}
}
ExampleActivity.java
// Package and imports
public class ExampleActivity extends AppCompatActivity implements ExampleMVP.ReqViewOps {
private ExampleMVP.PresenterOps presenterOps;
protected void onCreate( .. ) {
// ...
presenterOps = new ExamplePresenter(this);
presenterOps.doSomething();
}
// Implement methods of ExampleMVP.ReqViewOps
@Override
public void showSomething() {
}
}
ExamplePresenter.java
// Package and imports
public class ExamplePresenter implements ExampleMVP.PresenterOps, ExampleMVP.ReqPresenterOps {
private ExampleMVP.ReqViewOps reqViewOps;
private ExampleMVP.ModelOps modelOps;
public ExamplePresenter(ExampleMVP.ReqViewOps reqViewOps) {
this.reqViewOps = reqViewOps;
this.modelOps = new ExampleModel(this);
}
// Implement methods of ExampleMVP.PresenterOps
@Override
public void doSomething() {
modelOps.catchSomething();
}
// Implement methods of ExampleMVP.ReqPresenterOps
@Override
public void returnSomething() {
reqViewOps.showSomething();
}
}
ExampleModel.java
// Package and imports
public class ExampleModel implements ExampleMVP.ModelOps {
private ExampleMVP.ReqPresenterOps reqPresenterOps;
public ExampleModel(ExampleMVP.ReqPresenterOps reqPresenterOps) {
this.reqPresenterOps = reqPresenterOps;
}
// Implement methods of ExampleMVP.ReqPresenterOps
@Override
public void catchSomething() {
reqPresenterOps.returnSomething();
}
}
A Activity (View) instancia ExamplePresenter para receber os métodos da ExampleMVP.PresenterOps e assim consegue chamar o método doSomething().
A Presenter por sua vez recebe como parâmetro no construtor uma referência pra Activity para posteriormente chamar os métodos da ExampleMVP.ReqViewOps e instancia ExampleModel para receber os métodos da ExampleMVP.ModelOps. Após a Activity chamar o método da presenterOps este chama o método catchSomething() responsável por capturar informações no banco de dados.
A Model recebe como parâmetro no construtor uma referência para a Presenter para receber os métodos da ExampleMVP.ReqPresenterOps. Feito as capturas requisitadas no banco de dados, este chama o returnSomething() que vai tratar os retornos trazidos pelo método da ExampleMVP.ModelOps.
Voltando para a Presenter, estamos na função returnSomething() que no final, após realizar os devidos ajustes, irá chamar o showSomething() para mostrar os resultados na Activity.
activity
- example
- ExampleActivity
- ExamplePresenter
- ExampleModel
- ExampleMVP