728x90
반응형
먼저, 위키 백과가 정의 하고 있는 어댑터 패턴은
어댑터 패턴(Adapter pattern)은 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해준다.
(출처 :위키백과)
쉽게 말하면 ...
어댑터 패턴은 위의 짤에 나오는 인형탈과 같이 사람이 어떤 캐릭터를 표현하고자 할 때 사용하는 것!!
이렇게 A가 B의 역할을 하길 원할떄, 사용하는 것이 어댑터 패턴으로 생각하면 쉬울 것 같다.
오리와 가짜 오리, 가짜 오리가 오리처럼 행동하는 것을 어댑터 패턴에 적용시켜 보았다.
오리는 날수 있고, 꿱! 하고 말을 한다.
말을 하는 것, 나는 것으로 각 오리, 가짜 오리를 구성하게끔 만들었다.
이것을 안드로이드 앱으로 구현을 해보았다.
구현한 앱 설명
앱 화면이다.
해당하는 것의 버튼을 누르면, 나는 것과 말을 하는 것에 대한 결과가 보여진다.
소스를 보면...
< 오리 >
interface DuckInterface{
public String quack();
public String fly();
}
class Duck implements DuckInterface{
@Override
public String quack() {
return "Quack! Quack!";
}
@Override
public String fly() {
return "I can fly!";
}
}
< 가짜 오리 >
interface FakeDuckInterface{
public String fakeQuack();
public String fakeFly();
}
class FakeDuck implements FakeDuckInterface{
@Override
public String fakeQuack() {
return "Fake Quack!";
}
@Override
public String fakeFly() {
return "I can't fly!";
}
}
< 가짜 오리를 진짜 오리처럼 보이게 >
class FakeDuckToDuckAdapter extends Duck {
FakeDuck fakeDuck;
public FakeDuckToDuckAdapter(FakeDuck fakeDuck) {
this.fakeDuck = fakeDuck;
}
@Override
public String quack() {
return fakeDuck.fakeQuack();
}
@Override
public String fly() {
return fakeDuck.fakeFly();
}
}
이것들을 다 합쳐서 보면..!
< 전제 소스 >
package com.designpattern.adapter;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class AdapterActivity extends Activity implements View.OnClickListener {
TextView mFlyTextView;
TextView mQuackTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_adapter);
init();
}
private void init(){
Button btnDuck = findViewById(R.id.buttonDuck);
btnDuck.setOnClickListener(this);
Button btnFakeDuck = findViewById(R.id.buttonFakeDuck);
btnFakeDuck.setOnClickListener(this);
Button btnFakeDuckToDuck = findViewById(R.id.buttonFakeDuckToDuck);
btnFakeDuckToDuck.setOnClickListener(this);
mFlyTextView = findViewById(R.id.flyTextView);
mQuackTextView = findViewById(R.id.quackTextView);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.buttonDuck:
Duck duck = new Duck();
mFlyTextView.setText(duck.fly());
mQuackTextView.setText(duck.quack());
break;
case R.id.buttonFakeDuck:
FakeDuck fakeDuck = new FakeDuck();
mFlyTextView.setText(fakeDuck.fakeFly());
mQuackTextView.setText(fakeDuck.fakeQuack());
break;
case R.id.buttonFakeDuckToDuck:
Duck fakeDuckToDuck = new FakeDuckToDuckAdapter(new FakeDuck());
mFlyTextView.setText(fakeDuckToDuck.fly());
mQuackTextView.setText(fakeDuckToDuck.quack());
break;
}
}
}
interface DuckInterface{
public String quack();
public String fly();
}
class Duck implements DuckInterface{
@Override
public String quack() {
return "Quack! Quack!";
}
@Override
public String fly() {
return "I can fly!";
}
}
interface FakeDuckInterface{
public String fakeQuack();
public String fakeFly();
}
class FakeDuck implements FakeDuckInterface{
@Override
public String fakeQuack() {
return "Fake Quack!";
}
@Override
public String fakeFly() {
return "I can't fly!";
}
}
class FakeDuckToDuckAdapter extends Duck {
FakeDuck fakeDuck;
public FakeDuckToDuckAdapter(FakeDuck fakeDuck) {
this.fakeDuck = fakeDuck;
}
@Override
public String quack() {
return fakeDuck.fakeQuack();
}
@Override
public String fly() {
return fakeDuck.fakeFly();
}
}
동작 동영상 입니다.
728x90
반응형
'SELF STUDY > Design Pattern' 카테고리의 다른 글
[디자인패턴] 템플릿 메소드 패턴 | Template Method Pattern | 안드로이드 예제 (0) | 2021.12.30 |
---|---|
[디자인패턴] 퍼사드 패턴 | Facade Pattern | 안드로이드 예제 (0) | 2021.12.27 |
[디자인패턴] 커맨드 패턴 | Command Pattern | 안드로이드 예제 (0) | 2021.09.29 |
[디자인패턴] 데코레이터 패턴 | Decorator pattern (0) | 2021.09.01 |
[디자인 패턴] Observer pattern | 옵저버 패턴 (0) | 2021.08.18 |