728x90
반응형
<activity_main.xml>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".View.MainActivity">
<TextView
android:layout_marginLeft="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="이름 : "/>
<TextView
android:layout_marginLeft="20dp"
android:layout_marginBottom="20dp"
android:id="@+id/userId_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="없음"/>
<TextView
android:layout_marginLeft="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="나이 : "/>
<TextView
android:layout_marginLeft="20dp"
android:layout_marginBottom="20dp"
android:id="@+id/userAge_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="0"/>
<Button
android:id="@+id/getUserBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="사용자 정보 가져오기"/>
</LinearLayout>
Contract ( view와 presenter가 구현해야할 인터페이스를 정의 )
public interface main_view_contract {
/*
MVP의 View가 구현할 인터페이스
프레젠터가 View를 조작 할때 사용
*/
interface View{
void showToast(String message);
void setText_userName(String name);
void setText_userAge(int age);
}
/*
MVP의 Presenter가 구현할 인터페이스
View를 클릭 했을대 등 View가 Presenter에 알릴때 사용
*/
interface userActoin{
void setUserName(String name);
void getUserName();
void setUserAge(int age);
void getUserAge();
}
}
Presenter
( view에서 이벤트가 발생하면 presenter에 통보되고 prensenter가 model에서 데이터 처리를 한후 view를 조작 )
public class main_presenter implements main_view_contract.userActoin{
private final main_view_contract.View View;
private final main_model mm;
public main_presenter(main_view_contract.View View,main_model mm) {
this.View = View;
this.mm = mm;
}
// 뷰에서 연락이 온 것을 프레젠터가 받아서 모델에 접근하여 데이터 처리하기.
// View (Event발생) -> presenter에 통보 -> presenter가 Model에서 데이터 가져옴, -> 다시 presenter가 View를 조작
@Override
public void setUserName(String name) {
mm.setName(name);
View.showToast("이름 변경");
}
@Override
public void getUserName() {
View.setText_userName(mm.getName());
View.showToast("이름 가져옴");
}
@Override
public void setUserAge(int age) {
mm.setAge(age);
View.showToast("나이 변경");
}
@Override
public void getUserAge() {
View.setText_userAge(mm.getAge());
View.showToast("나이 가져옴");
}
}
Model ( 비지니스 로직이 담겨져 있는 곳, )
public class main_model {
private String name = "홍길동";
private int age = 29;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
View ( 사용자에게 보여지는 화면을 나타내는 곳으로, 발생한 이벤트를 프레젠터에 전달한다 .)
( constract의 View 부분을 immplement 하여 구현하하여야 한다. )
public class MainActivity extends AppCompatActivity implements main_view_contract.View{
public main_presenter mp;
public main_model mm;
public Button getUserData_Btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mm = new main_model();
mp = new main_presenter((main_view_contract.View)this,mm); //엑티비티에서 구현해야할 뷰의 인터페이스와, 모델을 가지고 인스턴스 생성
mp.getUserName();
mp.getUserAge();
getUserData_Btn = (Button)findViewById(R.id.getUserBtn);
// 버튼 이벤트
getUserData_Btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mp.setUserName("유저이름");
mp.setUserAge(34);
mp.getUserName();
mp.getUserAge();
}
});
}
// Presenter가 View를 조작할 때 이용한다 ( 프레젠터로 부터 받은 결과를 실행 , View 에서 구현 )
@Override
public void showToast(String message) {
Toast.makeText(this,message,Toast.LENGTH_LONG).show();
}
@Override
public void setText_userName(String name) {
((TextView)findViewById(R.id.userId_text_view)).setText(name);
}
@Override
public void setText_userAge(int age) {
((TextView)findViewById(R.id.userAge_text_view)).setText(Integer.toString(age));
}
}
728x90
반응형
'Android 공부 > 디자인패턴' 카테고리의 다른 글
1) MVVM 패턴 (0) | 2020.01.30 |
---|---|
MVP 패턴 정리1 (0) | 2019.10.02 |