본문 바로가기

디자인패턴

Decorator Pattern_ver.02(스포츠카)

  • 데코레이터 패턴을 사용하여 스포츠카의 종류에 각 파츠를 추가하여 최고 속력을 다르게 나타내도록 설계
  •  
public abstract class SportsCar {
    String name = "없음";

    public String getName() {
        return name;
    }

    public abstract int speed();
}

--------------------------------------

public abstract class Parts extends SportsCar{

    SportsCar sportsCar;

    public abstract String getName();

}

 

 

public class SuperCar extends SportsCar{
    public SuperCar() {
        name = "슈퍼 스포츠카 ";
    }

    public int speed() {
        return 220;
    }
}

--------------------------------------

public class OldCar extends SportsCar{
    public OldCar() {
        name = "오래된 스포츠카 ";
    }

    public int speed() {
        return 140;
    }
}

--------------------------------------

public class GorgeousCar extends SportsCar{
    public GorgeousCar() {
        name = "매우 엄청난 스포츠카 ";
    }

    public int speed() {
        return 280;
    }
}

 

 

public class Wing extends Parts{

    public Wing(SportsCar sportsCar) {
        this.sportsCar = sportsCar;
    }

    public String getName(){
        return sportsCar.getName() + "+ 윙 ";
    }

    public int speed() {
        return sportsCar.speed() + 20;
    }
}

--------------------------------------

public class SuperEngine extends Parts{
    public SuperEngine(SportsCar sportsCar) {
        this.sportsCar = sportsCar;
    }

    public String getName() {
        return sportsCar.getName() + "+ 슈퍼엔진 ";
    }

    public int speed() {
        return sportsCar.speed() + 100;
    }
}

--------------------------------------

public class Breaker extends Parts{

    public Breaker(SportsCar sportsCar) {
        this.sportsCar = sportsCar;
    }

    public String getName() {
        return sportsCar.getName() + "+ 브레이크 ";
    }

    public int speed() {
        return sportsCar.speed() - 20;
    }
}

 

 

public class Drive {
    public static void main(String[] args){
        SportsCar sportsCar = new SuperCar();
        System.out.println(sportsCar.getName() + "maxSpeed= " + sportsCar.speed() + "km");

        SportsCar sportsCar1 = new GorgeousCar();
        sportsCar1 = new Wing(sportsCar1);
        sportsCar1 = new SuperEngine(sportsCar1);
        System.out.println(sportsCar1.getName() + "maxSpeed= " + sportsCar1.speed() + "km");

        SportsCar sportsCar2 = new OldCar();
        sportsCar2 = new Breaker(sportsCar2);
        System.out.println(sportsCar2.getName() + "maxSpeed= " + sportsCar2.speed() + "km");
    }
}

 

컴파일 결과

 

 

GitHub - Pearlmoon997/Design_Patterns: Design_Patterns

Design_Patterns. Contribute to Pearlmoon997/Design_Patterns development by creating an account on GitHub.

github.com

 

'디자인패턴' 카테고리의 다른 글

Decorator Pattern_카페  (0) 2022.05.23
Builder Pattern  (0) 2022.05.23
Singleton Pattern_ver.02  (0) 2022.05.22
Singleton Pattern  (0) 2022.05.21
Factory Method_ver.02 (햄버거)  (0) 2022.05.19