22-04-11-비지터패턴-1부-패턴소개

22-04-11-비지터패턴-1부-패턴소개

목차

01.사용되는 상황

02.코드로 확인해보기

02.1 여러디바이스에 추가하고 싶은 경우

03.방문자 패턴이란?

01.사용되는 상황

  • 기존 코드를 건드리지 않고 새로운 기능 추가하는 것
  • 기능을 구현할 때 기존 클래스에 코드를 추가하는데 그럴수 없는 경우가 있고 원치 않는 경우가 있을 수 있음
  • 단일 책임 원칙 (Single responsibility principle)을 지키고 싶고, 책임을 증가시키고 싶지 않는 경우
  • 버그가 생길 수 있어서 그곳에 넣지 않고 분리하고 싶은 경우
  • 그 코드가 가진 특성상 여러 곳에서 사용해야하는 경우나 한곳에 모으고 싶은 경우

02.코드로 확인해보기

02.1 여러디바이스에 추가하고 싶은 경우

  • 기기 마다 달라진다는 가정으로 구현된 디자인 패턴이 적용되지 않은 경우
public interface Device{
}
public Phone implements Device{
}
public Watch implements Device{
}
public class Client{
    public static void main(String[] args)
    {
        Shape rectangle = new Rectangle();
        rectangle.printTo(new Phone());
	}
}
public interface Shape {
    void printTo(Device device);
}// 모든 디바이스에 쓰기 위함
public class Rectangle implements Shape{
	@Override
    public void printTo(Device device){
        if(device instanceof Phone){
            System.out.println("print Rectangle to Phone");
        }else if(device instanceof Watch){
            System.out.println("print Rectangle to Watch");
        }
    }
}
public class Triangle implements Shape{
	@Override
    public void printTo(Device device){
        if(device instanceof Phone){
            System.out.println("print Triangle to Phone");
        }else if(device instanceof Watch){
            System.out.println("print Triangle to Watch");
        }
    }
}

03.방문자 패턴이란?

  • 기존 코드를 변경하기 않고 새로운 기능을 추가하는 방법

    • 더블 디스패치(Double Dispatch)를 활용할 수 있음
    • Dispatch는 어떤 다형성이나 분배, 배치

      • 어떤 요청이 들어오면 그것을 처리할 구체적인 클래스 메소드를 찾아서 배치하는 것
      • 요청 처리를 위임하는 것을 말함

image-20220411234438799


Written by@[KyeongMinPark]
Docker, C++, C#, Java, Golang으로 개발 모니터링운영 및 개발, 자원수집기 Beat & Exporter 개발 Gitlab Runner CI/CD & Hugo 연동과 테스트코드및 등을 공부와 개발중 ORM, TDD, BDD, DDD, DesignPattern, WebAssembly Studying

GitHub