[디자인 모드] [주입 의존]

2216 단어 디자인 모드
배경
운전 기사 가 운전 하 는 장면 이 있 습 니 다.
 
보통 이렇게 써 요.
Public Driver{ //  
    ...

    public void drive(){
        Car mCar=new Car(“  ”);
        mCar.dianHuo();//  
        mCar.guaDang();//  
        mCar.caiYouMen();//   
        mCar.daFangXiang();//   

        ...
    }
}

2. 문제
(1) 결합 도가 높 음: Driver 에서 Car 라 는 종 류 를 만 들 고 소지 하 며 Car 의 생명 주 기 를 관리 합 니 다.
(2) 유지 하기 어렵다: Car 의 유 니 버 설 성 이 너무 강해 서 자동차 모델 등 매개 변수 (예 를 들 어 자동 기어 와 수 동 기어) 를 세분 화하 여 서로 다른 처 리 를 실현 할 수 없다 (서로 다른 자동차, 점화, 기어, 액셀 밟 기, 방향 등 조작 이 각각 다르다).
 
3. 해결 방향
배경 에서 의 예 는 실질 적 으로 'XX 차 를 운전 하 는 운전 자, 운전' 이 고 핵심 은 XX 차 를 운전 하 는 것 이다.운전 기사 가 중요 한 게 아니 라어떻게 운전 하 는 지, 기 사 는 차 의 속성 에 의존한다.
따라서 운전 자의 의존 대상 차 를 운전 자 에 게 주입 해 야 하 며 운전 자 는 스스로 차 를 인용 할 필요 가 없다. 이 과정 에서 운전 자 는 주목 할 필요 가 없다.
 
4. 구체 적 인 방안
(1) Car 공공 속성 인터페이스
public interface ICar {
    public void dianHuo();//  
    public void guaDang();//  
    public void caiYouMen();//   
    public void daFangXiang();//   

    …
}

(2) 다른 Car 의 종류
귀중 한 말
public class BaoMa implements ICar {//  
    public void dianHuo()
    {
        …
    }
    public void guaDang()
    {
        …
    }
    public void caiYouMen()
    {
        …
    }
    public void daFangXiang()
    {
        …
    }
    …
}

페라리
public class FaLaLi implements ICar {//   
    public void dianHuo()
    {
        …
    }
    public void guaDang()
    {
        …
    }
    public void caiYouMen()
    {
        …
    }
    public void daFangXiang()
    {
        …
    }
    …
}

 
3. 운전 기사
Public Driver{
    private ICar mCar;

    public Driver(ICar onecar){
        mCar = onecar;
    }
    public void drive(){
        mCar.dianHuo();//  ;
        mCar.guaDang();//  ;
        mCar.caiYouMen();//   ;
        mCar.daFangXiang();//   ;
    }
    ...
}

4. 구체 적 실현
//      ,  
BaoMa baoMa=new BaoMa();
Driver mDriverByBaoMa=new Driver(baoMa);
mDriverByBaoMa.drive();

//       ,  
FaLaLi faLaLi=new FaLaLi();
Driver mDriverByFaLaLi=new Driver(faLaLi);
mDriverByFaLaLi.drive();

좋은 웹페이지 즐겨찾기