디자인 모델 원칙 - 반전 의존 (Dependency Inversion Principle, DIP)
, 。 , 。
정의.
4. 567917. 고 층 모듈 은 바 텀 모듈 에 의존 해 서 는 안 되 고 모두 추상 [1] 에 의존 해 야 한다
4. 567917. 추상 은 구체 적 인 [2] 에 의존 하지 말고 구체 적 으로 추상 에 의존 해 야 한다
문제 의 유래
클래스 A 는 클래스 B 에 직접 의존 합 니 다. 클래스 A 를 의존 클래스 C 로 바 꾸 려 면 클래스 A 의 코드 를 수정 하여 이 루어 져 야 합 니 다.이런 장면 에서 류 A 는 보통 고 층 모듈 로 복잡 한 업무 논 리 를 책임 진다.클래스 B 와 클래스 C 는 저층 모듈 로 기본 적 인 원자 조작 을 책임 집 니 다.클래스 A 를 수정 하면 프로그램 에 불필요 한 위험 을 가 져 올 수 있 습 니 다.
거꾸로 의존 하 는 것 은 세 가지 방식 으로 이 루어 진다.
4. 567917. 구조 함 수 를 통 해 의존 대상 을 전달한다.예 를 들 어 구조 함수 에서 전달 해 야 할 매개 변 수 는 추상 류 나 인터페이스의 방식 으로 이 루어 진다
4. 567917. setter 방법 으로 의존 대상 을 전달 합 니 다.즉, 우리 가 설정 한 set XXX 방법 에서 의 매개 변 수 는 추상 류 나 인터페이스 로 전달 의존 대상 을 실현 하 는 것 이다
4. 567917. 인터페이스 성명 은 의존 대상 을 실현 하고 인터페이스 주입 이 라 고도 부른다.즉, 함수 성명 에서 매개 변 수 는 추상 류 나 인터페이스 로 전달 의존 대상 을 실현 하고 의존 대상 을 직접 사용 하 는 목적 을 달성 하 는 것 이다
자바 예
1. 여러 곳 에서 인용 한 개인 적 인 생각 도 대표 적 인 예 가 있다. 회 사 는 포드 와 혼 다 의 금메달 파트너 이다. 현 재 는 자동차 에 이 시스템 을 설치 하면 무인 운전 을 할 수 있 는 자율 주 행 시스템 을 개발 하 라 고 요구 하고 있다. 이 시스템 은 포드 와 혼 다 차 에서 사용 할 수 있 고 이 두 브랜드 의 자동차 가 이 시스템 을 사용 하면 자동 운전 을 할 수 있다.
/**
*
*/
public interface ICar {
void run();
void stop();
}
/**
*
*/
public class AutoCarSystem {
// ,
private ICar car = null;
public AutoCarSystem(ICar car) {
this.car = car;
}
public void setCar(ICar car) {
this.car = car;
}
public void carRun() {
car.run();
}
public void carStop() {
car.stop();
}
}
/**
* Fute
*/
public class FuteCar implements ICar {
@Override
public void run() {
System.out.println("FuteCar run");
}
@Override
public void stop() {
System.out.println("FuteCar stop");
}
}
/**
* Benz
*/
public class BenzCar implements ICar {
@Override
public void run() {
System.out.println("BenzCar run");
}
@Override
public void stop() {
System.out.println("BenzCar stop");
}
}
데모 호출
public class TestDemo {
public static void main(String[] args) {
FuteCar futeCar = new FuteCar();
BenzCar benzCar = new BenzCar();
// ,
// futeCar
AutoCarSystem autoCarSystem = new AutoCarSystem(futeCar);
autoCarSystem.carRun();
autoCarSystem.carStop();
// benzCar
autoCarSystem.setCar(benzCar);
autoCarSystem.carRun();
autoCarSystem.carStop();
// , ICar , , 。 , 。
}
}
제어 단 출력 결과
FuteCar run
FuteCar stop
BenzCar run
BenzCar stop
2. 다시 예 를 들 어 사람 이 책 을 읽 고 한 사람 이 많은 책 을 읽 을 수 있다.
/**
*
*/
public interface IBook {
//
String title();
//
String content();
}
/**
*
* ,
*/
public class PeopleReadBook {
private IBook book = null;
public PeopleReadBook(IBook book) {
this.book = book;
}
public void setBook(IBook book) {
this.book = book;
}
public void readTitle() {
System.out.println(" :" + book.title());
}
public void readContent() {
System.out.println(" :" + book.content());
}
}
/**
* Java
*/
public class JavaBook implements IBook {
@Override
public String title() {
return "Java ";
}
@Override
public String content() {
return " Java, ";
}
}
/**
* C
*/
public class CBook implements IBook {
@Override
public String title() {
return "C ";
}
@Override
public String content() {
return " C, ";
}
}
데모 호출
public class TestDemo {
public static void main(String[] args) {
JavaBook javaBook = new JavaBook();
CBook cBook = new CBook();
PeopleReadBook peopleReadBook = new PeopleReadBook(javaBook);
peopleReadBook.readTitle();
peopleReadBook.readContent();
peopleReadBook.setBook(cBook);
peopleReadBook.readTitle();
peopleReadBook.readContent();
}
}
제어 단 출력 결과
:Java
: Java,
:C
: C,
레 퍼 런 스
JAVA 설계 원칙 의 의존 도 원칙 설계 모델 6 대 원칙 (3): 의존 도 원칙 설계 원칙 (4) 의존 도 원칙 (DIP) 설계 모델 6 대 원칙: 의존 도 원칙
4. 567917. 자바 에서 추상 은 일반적으로 자바 인터페이스 (interface) 나 추상 류 (abstract class) 를 말한다.↩
4. 567917. 자바 에서 구체 적 이거 나 세부 적 인 것 은 일반적으로 실현 류 를 가리킨다.↩
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.