자바 디자인 모드-브리지 모드 상세 설명

예 를 들다
수요:서로 다른 핸드폰 유형의 서로 다른 브랜드(예 를 들 어 버튼 핸드폰:노키아,폴 더 핸드폰:뉴 먼,스마트 폰:화 웨 이,샤 오미)에 대해 조작 프로 그래 밍(예 를 들 어 켜 기,꺼 지기,전화 하기)을 실현 한다.
먼저 일반적인 해법 을 말 해 보 자.서로 다른 핸드폰 유형 을 아버지 핸드폰 에 계승 하고 마지막 으로 각 브랜드 가 해당 하 는 핸드폰 유형 을 계승 한다.
在这里插入图片描述
단점:언뜻 보기 에는 문제 가 없 지만 확장(폭발)이 쉽 지 않다.새로운 핸드폰 유형(예 를 들 어 신 흥 접 이식)을 추가 하면 각 핸드폰 브랜드 의 유형 을 추가 하여 계승 해 야 한다(예 를 들 어 스마트 폰 을 계승 한 화 웨 이 샤 오미).마찬가지 로 우리 가 휴대 전화 브랜드 를 하나 늘 리 면 각 휴대 전화 스타일 에서 도 늘 려 야 한다.단일 직책 원칙 을 위반 하여 유지 비용 이 높다.
해결 방안 은 바로 아래 의 주인공:브리지 모델 이다.
브리지 모드
브리지 모드(Bridge)는 구조 형 디자인 모델 이다.말 그대로 다 리 를 놓 고 연결 하 는 것 처럼 포장,집적 과 계승 등 행 위 를 통 해 서로 다른 유형의 직책 을 맡 게 하고 추상 과 추상 을 두 가지 서로 다른 차원 에 두 어 두 가지 차원 을 독립 적 으로 바 꾸 고 각 부분의 독립 성 을 유지 하 며 그들의 기능 을 확대 해 야 한다.
원리 도표:
在这里插入图片描述
클 라 이언 트 클래스:클 라 이언 트 호출
  • Abstraction 추상 류:브리지 류 를 충당 하여 Implementor 인 터 페 이 스 를 유지 했다(즉,그의 실현 류 Concrete Implementor A...)
  • RefindAbstraction 류:추상 류 의 하위 클래스 입 니 다
  • Implementor 인터페이스:행위 실현 인터페이스
  • Concrete Implementor A/B 류:행위 의 구체 적 인 실현 류
  • UML 유 도 를 보면 추상 류 와 인 터 페 이 스 는 취 합 된 관계,즉 호출 과 호출 된 관계 이다.이렇게 되면 다 리 를 놓 은 후에 구체 적 으로 유형 호출 방법=부모 류 추상 류 의 방법=행위 인터페이스 방법=구체 적 인 인터페이스 행위 실현 류 를 실현 하여 연결 을 완성 하 는 동시에 이들 은 서로 독립 적 이 고 확장 하기 쉽다.
    在这里插入图片描述
    실전 예시
    브리지 모델 로 사례 의 실제 문 제 를 해결 하 다.
    아 날로 그:
    在这里插入图片描述
    코드:
    
    //  
    public interface Brand {
    	void open(); //  
    	void close(); //  
    	void call();//   
    }
    //     
    public class NOKIA implements Brand{
        @Override
        public void open() {
            System.out.println("       ");
        }
        @Override
        public void close() {
            System.out.println("       ");
        }
        @Override
        public void call() {
            System.out.println("        ");
        }
    }
    public class Newsmy implements Brand{
        @Override
        public void open() {
            System.out.println("      ");
        }
        @Override
        public void close() {
            System.out.println("      ");
        }
        @Override
        public void call() {
            System.out.println("       ");
        }
    }
    public class Huawei implements Brand{
        @Override
        public void open() {
            System.out.println("      ");
        }
        @Override
        public void close() {
            System.out.println("      ");
        }
        @Override
        public void call() {
            System.out.println("       ");
        }
    }
    public class Xiaomi implements Brand{
        @Override
        public void open() {
            System.out.println("      ");
        }
        @Override
        public void close() {
            System.out.println("      ");
        }
        @Override
        public void call() {
            System.out.println("       ");
        }
    }
    
    
    //   
    public abstract class Phone {
    	private Brand brand;//      
    	public Phone(Brand brand) {//   
    		super();
    		this.brand = brand;
    	}
    	public void open() {
    		this.brand.open();
    	}
    	public void close() {
    		this.brand.close();
    	}
    	public void call() { this.brand.call(); }
    }
    //    
    public class ButtonPhone extends Phone{
        public ButtonPhone(Brand brand) {
            super(brand);
        }
        public void open() {
            super.open();
            System.out.println("    ");
        }
        public void close() {
            super.close();
            System.out.println("    ");
        }
        public void call() {
            super.call();
            System.out.println("    ");
        }
    }
    public class SlidePhone extends Phone{
        public SlidePhone(Brand brand) {
            super(brand);
        }
        public void open() {
            super.open();
            System.out.println("    ");
        }
        public void close() {
            super.close();
            System.out.println("    ");
        }
        public void call() {
            super.call();
            System.out.println("    ");
        }
    }
    public class SmartPhone  extends Phone{
        public SmartPhone(Brand brand) {
            super(brand);
        }
        public void open() {
            super.open();
            System.out.println("    ");
        }
        public void close() {
            super.close();
            System.out.println("    ");
        }
        public void call() {
            super.call();
            System.out.println("    ");
        }
    }
    
    
    //     
    public class Client {
        public static void main(String[] args) {
            Phone phone1 = new ButtonPhone(new NOKIA());
            phone1.open();
            phone1.call();
            phone1.close();
            System.out.println("=======================");
            Phone phone2 = new SlidePhone(new Newsmy());
            phone2.open();
            phone2.call();
            phone2.close();
            System.out.println("=======================");
            Phone phone3 = new SmartPhone(new Huawei());
            phone3.open();
            phone3.call();
            phone3.close();
        }
    }
    
    在这里插入图片描述
    총결산
    4.567917.추상 과 실현 부분의 분 리 를 실현 하여 시스템 의 유연성 을 크게 제공 하여 추상 적 인 부분 과 실현 부분 을 독립 시 켰 다.이것 은 시스템 이 분 층 설 계 를 하여 더욱 좋 은 구조 화 시스템 을 형성 하 는 데 도움 이 된다4.567917.브리지 모델 은 다 층 계승 방안 을 대체 하면 서브 클래스 의 개 수 를 줄 이 고 시스템 의 관리 와 유지 원 가 를 낮 출 수 있다4.567917.브리지 모델 의 도입 은 시스템 의 이해 와 디자인 난이 도 를 증가 시 켰 다.집적 관련 관 계 는 추상 층 에 구축 되 기 때문에 개발 자 에 게 추상 에 대한 디자인 과 프로 그래 밍 을 요구 했다
  • 흔히 볼 수 있 는 응용 장면:-JDBC 드라이버
  • -은행 이체 시스템
    이체 분류:온라인 이체,카운터 이체,AMT 이체
    이체 사용자 유형:일반 사용자,카드 사용자,카드 사용자...
     -메시지 관리
    메시지 종류:인 스 턴 트 메시지,지연 메시지
    메시지 분류:핸드폰 문자,메 일 메시지,QQ 메시지...
    이 글 은 여기까지 입 니 다.당신 에 게 도움 을 줄 수 있 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 내용 에 관심 을 가 져 주 실 수 있 기 를 바 랍 니 다!

    좋은 웹페이지 즐겨찾기