[외관 디자인 모델] 의 이야기 출처 (Facade Pattern)

외관 모델: 외관 모델 (외관 모델 Facade Pattern 이 라 고도 함) 은 외부 와 하나의 서브 시스템 의 통신 은 반드시 통 일 된 외관 대상 을 통 해 이 루어 져 야 한다.외관 모델 은 고 차원 의 인 터 페 이 스 를 제공 하여 서브 시스템 을 더욱 쉽게 사용 할 수 있 게 한다.모든 서브 시스템 은 하나의 외관 류 만 있 고 이 외관 류 는 하나의 사례 만 있다. 즉, 이것 은 하나의 사례 모델 이라는 것 이다.하지만 전체 시스템 에는 여러 개의 겉치레 가 있 을 수 있다.
 
이야기 1:
저 는 전문 적 인 Nikon 카 메 라 를 가지 고 있 습 니 다. 저 는 수 동 으로 조리개, 셔터 를 조절 하 는 것 을 좋아 합 니 다. 이렇게 찍 은 사진 이 야 말로 전문 적 이지 만 MM 은 이런 것 을 모 르 고 한참 동안 가 르 쳤 지만 할 줄 모 릅 니 다.다행히 카 메 라 는 Facade 디자인 모델 이 있어 서 카 메 라 를 자동 기어 로 조정 하고 목 표를 향 해 셔터 를 누 르 면 됩 니 다. 모든 것 을 카메라 가 자동 으로 조정 하면 MM 도 이 카메라 로 저 에 게 사진 을 찍 어 줄 수 있 습 니 다.(카메라 제조 자 는 일련의 조리개, 초점 거리, 셔터 등 을 자동 차단 버튼 으로 밀봉 했다. 버튼 이라는 일련의 동작 이 단숨에 이 루어 지면 이 버튼 은 대외 적 으로 사용자 에 게 제공 하 는 외관 이 고 사용 자 는 더 이상 일련의 번 거 로 운 조작 이 필요 하지 않다)
 
이야기 2:
사람 은 오곡 잡곡 을 먹고 음식 이 조 화 롭 지 못 하 며 기후 가 적응 되 지 않 으 면 산성 체질 인 사람 은 병 이 나 기 쉽다. 병 이 나 면 병원 에 가서 진찰 을 받 아야 한다. 다음 절 차 를 밟 아 라. 환 자 는 반드시 먼저 접수 한 다음 에 진찰 을 받 아야 한다.만약 의사 가 화학 실험 을 요구한다 면 환 자 는 반드시 먼저 가격 을 깎 은 후에 비용 을 납부 해야만 화학 실험 부서 에 가서 화학 실험 을 할 수 있다.화학 실험 후 다시 진료실 로 돌아가다.처음 진찰 을 받 으 러 간 사람 은 절 차 를 모 르 고 의사 당직 실로 달 려 가 의 사 를 찾 아 진찰 을 받 았 을 지도 모른다. 그러나 시스템 에 당신 의 번호 정보 가 없 으 면 의 사 는 컴퓨터 에서 당신 의 명세 서 를 작성 하지 못 하고 후속 으로 진행 할 수 없다.만약 이런 절차 가 있다 면 얼마나 좋 을 까: 접대원 이 대신 접수, 가격 인하, 납부, 약 채취 등 을 책임 진다.이 접대원 은 바로 외관 모델 의 구현 이다. 환 자 는 접대원 만 접촉 하고 접대원 은 각 부서 와 접촉한다.
 
이야기 3:
편 지 를 배달 하 는 과정 은: 먼저 편 지 를 쓰 는 내용 - > 그 다음 에 봉 투 를 쓴다 - > 편 지 를 봉투 에 넣는다 - > 그리고 우송 한다
휴대 전화 시대 의 도래 로 우체국 의 편지 발송 업 무 를 해 결 했 습 니 다. 지금 은 일이 있 습 니 다. 문 자 를 보 냅 니 다. 3 대 운영 자 시스템 에 누구 에 게 보 내 고 어떤 내용 을 보 내 는 지 알려 주면 봉투, 편지, 우체통 에 보 내 는 번 거 로 운 조작 을 하지 않 아 도 됩 니 다.
 
이야기 4:
보안 시스템 은 비디오, 센서, 경보기 세 부분 으로 구성 된다.보안 GG 가 시스템 을 다시 시작 할 때 반드시 비디오, 센서, 경보기 에 따라 전원 을 연결 하고 버튼 을 눌 러 야 한다.모니터링 소프트웨어 가 원 키 재 부팅 기능 을 가지 고 있다 고 가정 하면 버튼 만 누 르 면 자동 으로 순서대로 재 부팅 된다.대외 적 으로 누설 되 는 조작 과정 은 그렇게 많 지 않 아서 실수 하기 쉽 지 않다.
 
이런 이야기 들 은 모두 하나의 공통점 이 있 는데 그것 이 바로 상호작용 과정 에서 조작 절차 가 많 고 실수 하기 쉽다 는 것 이다.
이야기 1: 사진 을 찍 을 때 MM 은 초점 을 맞 추 지 않 고 조리개 를 누 르 고 셔터 를 눌 렀 을 수도 있 습 니 다. 그 결과 어떤 사진 을 찾 았 는 지 알 고 있 습 니 다.
이야기 2: 환 자 는 접수 하지 않 고 바로 의사 당직 실로 달 려 가 치 료 를 받 았 습 니 다. 난처 한 상황 이 발생 한 것 을 당신 은 알 고 있 습 니 다.
 
 
외관 모델 은 말하자면 하나의 종 류 를 봉 하여 사용자 의 조작 절 차 를 간소화 한 것 이다.이런 역할 은 순서대로 수행 하 는 것 이다.호출 자 는 구체 적 인 절 차 를 알 필요 가 없고 전달 할 매개 변 수 를 이 클래스 에 전달 해 야 합 니 다. 그러면 이 클래스 는 순서대로 실행 하면 됩 니 다. 높 은 확장 성과 높 은 내부 집적 저 결합 원칙 에 부합 합 니 다.예 를 들 어 어느 날 카메라 자동 차단 버튼 에 새로운 기능 이 생 겼 습 니 다. 당신 은 모 릅 니 다. 당신 은 그것 이 버튼 이라는 것 만 알 고 있 을 뿐 입 니 다.환자 가 의사 병원 에 등록 하려 면 환자 에 게 사회 보장 이 있 는 지 확인 해 야 한다. 환자 에 게 있어 서 나 는 병 을 보고 등록 하고 약 을 찾 으 며 비용 을 납부 하 는 것 은 내 가 완성 하지 않 아 도 되 고 접대원 을 직접 찾 으 면 된다.메 시 지 를 보 내 려 면 정보 내용 이 건강 한 지 확인 해 야 한다.사용자 가 알 필요 가 없다.FaceFade 는 확장 만 하면 됩 니 다.
 
예 (자기 오리지널 이 아 님):
 
/**
 *     /    :Facade Pattern
 *     :
 *             、             。
 *              :         ,            。
 * @version 2009-6-15
 * @author Winty([email protected])
 */
public class FacadeTest{
    public static void main(String[] args){
        //     
        Camera camera1,camera2;
        camera1 = new Camera();
        camera2 = new Camera();
        
        Sensor sensor;
        sensor = new Sensor();

        Alarm alarm;
        alarm = new Alarm();

        //    
        camera1.turnOn();
        camera2.turnOn();
        sensor.activate();
        alarm.activate();
        System.out.println("");

        /////////////////////////////////
        //      
        SecurityFacade security = new SecurityFacade();
        security.start();
    }
}

/**
 *   :Facade
 */
class SecurityFacade{
    private Camera camera1;
    private Camera camera2;
    private Sensor sensor;
    private Alarm alarm;

    public SecurityFacade(){
        camera1 = new Camera();
        camera2 = new Camera();
        sensor = new Sensor();
        alarm = new Alarm();
    }
    //  
    public void start(){
        camera1.turnOn();
        camera2.turnOn();
        sensor.activate();
        alarm.activate();
    }

    //  
    public void stop(){
        camera1.turnOff();
        camera2.turnOff();
        sensor.deactivate();
        alarm.deactivate();
    }
}

class Camera{
    public void turnOn(){
        System.out.println("turn on the Camera.");
    }

    public void turnOff(){
        System.out.println("turn off the Camera.");
    }

    //  
    public void rotate(){
        System.out.println("rotate the Camera.");
    }
}


class Sensor{
    public void activate(){
        System.out.println("activate the sensor.");
    }

    public void deactivate(){
        System.out.println("deactivate the sensor.");
    }

    //     
    public void trigger(){
        System.out.println("trigger the sensor.");
    }
}

class Alarm{
    public void activate(){
        System.out.println("activate the alarm.");
    }

    public void deactivate(){
        System.out.println("deactivate the alarm.");
    }

    //     
    public void ring(){
        System.out.println("ring the alarm.");
    }
}

 

좋은 웹페이지 즐겨찾기