ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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
Designed by Tistory.