[자바 디자인패턴 소스코드] Template Pattern
- Java/Java
- 2022. 6. 8. 23:30
템플릿 패턴
/**
* [템플릿 패턴]은 전체적인 알고리즘은 상위 클래스에서 구현하면서
* 다른 부분은 하위 클래스에서 구현할 수 있도록 하는 디자인 패턴이다.
* 전체적인 알고리즘 코드를 재사용하는 데 유용하다.
*/
public class TemplatePattern {
public static void main(String[] args) {
Fan fan = new Fan();
Samsung samsungAirConditioner = new Samsung(fan);
samsungAirConditioner.changeTemp(UPDOWN.UP);
samsungAirConditioner.changeTemp(UPDOWN.DOWN);
LG LGAirConditioner = new LG(fan);
LGAirConditioner.changeTemp(UPDOWN.DOWN);
LGAirConditioner.changeTemp(UPDOWN.UP);
}
}
enum FANSTATUS {ON, OFF}
enum TEMPRATURE {
EIGHTEEN(18), NINETEEN(19), TWENTY(20);
int value;
private TEMPRATURE(int value){
this.value = value;
}
public int getValue(){
return value;
}
}
enum UPDOWN {
UP("up"), DOWN("down");
String value;
private UPDOWN(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
abstract class AirConditioner {
private Fan fan;
private TEMPRATURE temprature;
public AirConditioner(Fan fan) {
this.fan = fan;
temprature = TEMPRATURE.NINETEEN;
}
public TEMPRATURE getTempStatus() {
return temprature;
}
private void setTempStatus(TEMPRATURE temprature) {
this.temprature = temprature;
System.out.println(this.temprature.getValue());
}
public void changeTemp(UPDOWN updown) {
TEMPRATURE temprature = getTempStatus();
FANSTATUS fanStatus = fan.getFanStatus();
if(fanStatus == FANSTATUS.OFF) {
System.out.println("fan on.");
fan.open();
}
if(UPDOWN.UP == updown) {
if(temprature == TEMPRATURE.EIGHTEEN) {
temprature = TEMPRATURE.NINETEEN;
}
else if(temprature == TEMPRATURE.NINETEEN) {
temprature = TEMPRATURE.TWENTY;
}
}
else if(UPDOWN.DOWN == updown) {
if(temprature == TEMPRATURE.TWENTY) {
temprature = TEMPRATURE.NINETEEN;
}
else if(temprature == TEMPRATURE.NINETEEN) {
temprature = TEMPRATURE.EIGHTEEN;
}
}
turn(updown);
System.out.print(" turn " + updown.getValue() + " ");
setTempStatus(temprature);
}
protected abstract void turn(UPDOWN updown);
}
class Samsung extends AirConditioner {
public Samsung(Fan fan) {
super(fan);
}
@Override
protected void turn(UPDOWN updown) {
System.out.print("Samsung: ");
}
}
class LG extends AirConditioner {
public LG(Fan fan) {
super(fan);
}
@Override
protected void turn(UPDOWN updown) {
System.out.print("LG: ");
}
}
class Fan {
private FANSTATUS fanStatus;
public Fan() {
fanStatus = FANSTATUS.OFF;
}
public FANSTATUS getFanStatus() {
return fanStatus;
}
public void close() {
fanStatus = FANSTATUS.OFF;
}
public void open() {
fanStatus = FANSTATUS.ON;
}
}
'Java > Java' 카테고리의 다른 글
[자바 디자인패턴 소스코드] Abstract Factory Pattern (0) | 2022.06.16 |
---|---|
[자바 디자인패턴 소스코드] Factory Pattern (0) | 2022.06.15 |
[자바 디자인패턴 소스코드] Decorator Pattern (0) | 2022.06.02 |
[자바 디자인패턴 소스코드] Observer Pattern (0) | 2022.06.02 |
[자바 디자인패턴 소스코드] Command Pattern (0) | 2022.05.25 |
이 글을 공유하기