ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 구조패턴 > 퍼싸드 *
    기타/디자인패턴 2021. 2. 11. 10:12

    facade : 1(건물의) 정면[앞면]  2(실제와는 다른) 표면, 허울

     

     

    퍼사드 패턴은 어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공하는 것을 말한다.

    퍼사드에서 고수준 인터페이스를 제공하기 때문에 서브시스템을 더 쉽게 사용할 수 있다.

    예를 들어 홈씨어터에 조명, 스크린, 프로젝트,dvd 기계들을 끄고 켜고 등 조작하는 행위들을 하는 여러 서브시스템을 가지고 있을 때, 그러한 여러 객체를 한 번에 호출하고 조작해주는 facade 객체를 생성하는 것이다.

    * 최소 지식 원칙 

    객체 사이의 상호작용은 될 수 있으면 아주 가까운 "친구" 사이에서만 허용하는 것이 좋다.

    어떤 객체든 그 객체와 상호작용하는 클래스의 개수, 상호작용을 어떤식으로 하는 지에 주의를 기울여야 한다는 의미이다.

     

    여러 객체와 인연맺는 것을 피하기 위한 가이드 라인

    * 다음 네 종류의 객체의 메서드만 호출한다.

    - 객체 자체

    - 메서드에 매개변수로 전달된 객체

    - 그 메서드에서 생성하거나 인스턴스를 만든 객체

    - 그 객체에 속하는 구성요소 (인스턴스 변수에 의해 참조되는 객체, A에는 B가 있다.)

     

    // 원칙을 따르지 않은 경우
    public float getTemp(){
        //station 으로부터 thermometer 라는 객체를 받은 다음, 
        // 그 객체의 getTemperature을 직접 호출
        Thermometer thermometer = station.getTemperature();
        
        return thermometer.getTemperature();
    }
    // 최소지식 원칙을 지킨 경우
    public float getTemp(){
        // station 클래스에 thermometer 에 요청을 해 주는 메서드를 추가. 의존 클래스 수를 줄여줌
        return station.getTemperature();
    }
    public class Car {
        Engine engine; // 구성요소 메서드 호출 가능
    
        public Car(Engine engine){ 
            this.engine = engine;
        }
    
        public void start(Key key){ //매개변수로 전달된 객체의 메서드 호출 가능
            Doors door = new Doors(); // 메서드 내에서 생성한 객체의 메서드 호출 가능
    
            boolean authorized = key.turns();
            
            if(authorized){
                engine.start();
                updateDashboardDisplay(); // 객체 내 메서드 호출 가능 
                doors.lock();
            }
        }
        
        private void updateDashboardDisplay(){
            
        }
    }

     

    * 자바에서 일상적으로 사용하는 것 중에 최소 지식 원칙에 위배되는 것 =>  System.out.println()

     

     

     

     

     

     

     

     

    반응형

    '기타 > 디자인패턴' 카테고리의 다른 글

    행위패턴 > 이터레이터 *  (0) 2021.02.11
    행위패턴 > 커맨드 *  (0) 2021.02.11
    구조패턴 > 데코레이터 *  (0) 2021.02.11
    구조패턴 > 컴포지트 *  (0) 2021.02.11
    구조패턴 > 어댑터 *  (0) 2021.02.11
Designed by Tistory.