- 데코레이터 패턴을 사용하여 스포츠카의 종류에 각 파츠를 추가하여 최고 속력을 다르게 나타내도록 설계
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 |