
디자인패턴 시작하기를 보고 정리하기
원하는 형태로 변환해 주는 장치. 어떤 클래스에 대한 코드를 변경할 수 없는 상황에서 수정을 대신 해주는 클래스


public abstract class Animal {
protected String name;
public Animal(String name){
this.name = name;
}
public abstract void sound();
}
public class Dog extends Animal{
public Dog(String name) {
super(name);
}
@Override
public void sound() {
System.out.println(name+": Barking");
}
}
public class Cat extends Animal{
public Cat(String name) {
super(name);
}
@Override
public void sound() {
System.out.println(name+": Meow");
}
}
public class Tiger {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
void roar(){
System.out.println("Growl");
}
}
Animal 을 상속받고, Tiger 객체를 필드에 선언한다.
그후, Animal 구조에 맞도록 tiger 객체에 데이터 set/get 한다.
public class TigerAdapter extends Animal{
private Tiger tiger;
public TigerAdapter(String name) {
super(name);
tiger = new Tiger();
tiger.setName(name);
}
@Override
public void sound() {
System.out.print(name+": ");
tiger.roar();
}
}
import java.util.ArrayList;
public class User {
public static void main(String[] args){
ArrayList<Animal> animals = new ArrayList<Animal>();
animals.add(new Dog("댕이"));
animals.add(new Cat("냥이"));
animals.add(new Cat("츄르"));
// animals.add(new Tiger("어흥"));//타입 불일치로 사용 불가
animals.add(new TigerAdapter("어흥"));
animals.forEach(Animal::sound);
}
}