-
[Week5] 5장 스트래티지 패턴 실습25 - 2/설계패턴 2025. 10. 15. 00:21
01. 모바일 접속 시 LTE를 사용할 지 Wifi를 사용할 지 전략 패턴으로 구현.
- Mobile.java
public abstract class Mobile { private String manufacturer; private String phoneNumber; private OnlineStrategy os; public Mobile(String manufacturer, String phoneNumber){ } public String getPhoneNumber(){ return phoneNumber; } public void setOnlineStrategy(OnlineStrategy os){ this.os=os; } public void connect(){ os.internet(); } public abstract void call(String number); public abstract void ring(String number); }- iPhone.java
public class iPhone extends Mobile{ public iPhone(String manufacturer, String phoneNumber) { super(manufacturer, phoneNumber); } @Override public void call(String number) { System.out.println(number+"로 전화를 겁니다."); } @Override public void ring(String number) { System.out.println(number+"에서 전화가 옵니다."); } }- OnlineStrategy.java
public interface OnlineStrategy { void internet(); }- WIFIStrategy.java
public class WIFIStrategy implements OnlineStrategy { @Override public void internet() { System.out.println("Wifi에 연결되었습니다."); } }- Main.java
public class Main { public static void main(String[] args) { iPhone ip = new iPhone("apple", "01012345678"); ip.setOnlineStrategy(new WIFIStrategy()); ip.connect(); ip.ring("01098765432"); ip.setOnlineStrategy(new LTEStrategy()); ip.connect(); ip.call("01098765432"); } }- 실행 결과

02. 목적지까지 도달하기 위해 교통 수단을 필요에 따라 바꾸어 탈 수 있음. 아래 다이어그램을 보고 걷기, 버스, 지하철로 전략을 바꿔가며 목적지에 갈 수 있도록 구현.
- Navigator.java
public abstract class Navigator { private String location; private String destination; private MovingStrategy ms; Navigator(String location, String destination){ this.location=location; this.destination=destination; } public void setMovingStaregy(MovingStrategy ms){ this.ms=ms; } public void buildRoute(){ ms.move(); } }- MovingStrategy.java
public interface MovingStrategy { void move(); }- WalkingStrategy.java
public class WalkingStrategy implements MovingStrategy { public void move(){ System.out.println("걸어서 갑니다."); } }- BusStrategy.java
public class BusStrategy implements MovingStrategy{ @Override public void move(){ System.out.println("버스를 타고 이동합니다."); } }- SubwayStrategy.java
public class SubwayStraetgy implements MovingStrategy{ @Override public void move(){ System.out.println("지하철을 타고 이동합니다."); } }- Tmap.java
public class Tmap extends Navigator{ public Tmap(String location, String destination){ super(location, destination); } }- Main.java
public class Main { public static void main(String[] args) { Navigator navi = new Tmap("한성대학교", "한성대입구역"); navi.setMovingStaregy(new WalkingStrategy()); navi.buildRoute(); navi.setMovingStaregy(new Bus()); navi.setMovingStaregy(new Subway()); navi.buildRoute(); } }- 실행 결과

03. 게임기의 게임팩 슈퍼 마리오에서 젤다의 전설로 갈아 끼우는 전략 패턴
- Console.java
public abstract class Console { private String manufacturer; private PackStrategy ps; public Console(String manufacturer) { this.manufacturer = manufacturer; } public String getManufacturer() { return manufacturer; } public void setPackStrategy(PackStrategy ps) { this.ps = ps; } public void insert() { if (ps != null) ps.display(); } public void display() { if (ps == null) { System.out.println("장착된 게임팩이 없습니다."); } else { ps.display(); } } }- Nintendo.java
public class Nintendo extends Console { public Nintendo() { super("Nintendo"); } public Nintendo(String manufacturer) { super(manufacturer); } }- PackStrategy.java
public interface PackStrategy { void display(); }- SuperMario.java
public class SuperMario implements PackStrategy{ @Override public void display(){ System.out.println("슈퍼마리오 게임팩으로 갈아끼웠습니다."); } }- Zalda.java
public class Zalda implements PackStrategy { @Override public void display(){ System.out.println("젤다의 전설 게임팩으로 갈아끼웠습니다."); } }- Main.java
public class Main { public static void main(String[] args) { Console cs = new Nintendo(); System.out.println("게임팩을 장착해주세요.\n\n"); cs.setPackStrategy(new SuperMario()); cs.display(); cs.setPackStrategy(new Zalda()); cs.display(); } }- 실행 결과

'25 - 2 > 설계패턴' 카테고리의 다른 글
[Week6] 6장 싱글톤패턴 실습 (0) 2025.10.15 ch06 싱글톤패턴 (0) 2025.10.15 ch05 스트래티지 패턴 (0) 2025.10.15 [Week4] 4장 디자인패턴 개요 실습 (0) 2025.10.14 [Week2] 2장 객체지향 원리 실습 (1) 2025.09.25