코드 깔끔 한 길 - 대상 과 데이터 구조

2774 단어
현재 면적 을 계산 하 는 수요 가 있 는데 그 중 하 나 는 다음 과 같다.
class Square{
    public $side;
}
class Geometry{
    public function area($shape){
        if($shape instanceof Square){
            return $shape->side * $shape->side;
        }
        return 0;
    }
}

 
누군가가 보 았 습 니 다. 당신 의 추상 적 인 문제 가 있 군요. 분명히 과정 을 향 한 것 입 니 다. 만약 에 하나의 유형 을 추가 하면 Geometry 류 의 모든 방법 을 수정 해 야 합 니 다.응, 그 랬 어. 그런데 반대로 방법 을 새로 추가 하면 기 존의 모양 류 는 움 직 이지 않 고 Geometry 류 에 방법 만 추가 하면 돼.
물론 다 중 실현 방식 도 있다.
class Square implements Shape{
    private $side;
    public function area(){
        return $this->side * $this->side;
    }
}

 
너 는 이렇게 하면 만사 가 다 잘 될 것 이 라 고 생각 하 니?아 닙 니 다.확실히 이렇게 이 루어 지고 새로운 유형 을 추가 하 며 새 신발 의 한 가지 실현 방법 만 있 으 면 된다. 간단 하 다.그러나 새로운 함 수 를 추가 하려 면 모든 종 류 를 수정 해 야 합 니 다.
간단하게 요약 하면 다음 과 같다.
  • 프로 세 스 코드 는 현재 데이터 구 조 를 바 꾸 지 않 는 전제 에서 새로운 함 수 를 추가 하 는 데 편리 하고 대상 을 대상 으로 현재 함수 의 전제 에서 새로운 유형 을 추가 하 는 데 편리 하 다
  • .
  • 프로 세 스 코드 는 모든 함 수 를 수정 해 야 하기 때문에 새로운 데이터 구 조 를 추가 하기 어렵다.모든 클래스 를 수정 해 야 하기 때문에 대상 코드 에 새 함 수 를 추가 하기 어렵 습 니 다
  • 대상 노출 행위, 데이터 숨 기기.새로운 데이터 형식 을 추가 하 는 데 편리 하고 기 존 행 위 를 수정 할 필요 가 없 으 며 기 존 대상 에 새로운 행 위 를 추가 하기 도 어렵다
  • .
  • 데이터 구조 (위의 첫 번 째 실현) 는 데 이 터 를 노출 시 키 고 뚜렷 한 행위 가 없다.기 존 데이터 구조 에 새로운 행 위 를 추가 하 는 동시에 기 존 함수 에 새로운 데이터 구 조 를 추가 하기 도 어렵다.

  • 물론 어떤 것 을 구체 적 으로 사용 할 지 는 유연 하 게 선택해 야 하 며 구 애 받 지 않 아 도 된다.
    새로운 행 위 를 유연 하 게 추가 하려 면 데이터 구 조 를 사용 하 라.새로운 유형 을 유연 하 게 추가 하려 면 대상 을 대상 으로 하 는 방식 을 사용한다.
    다음으로 전송:https://www.cnblogs.com/hujingnb/p/11568721.html

    좋은 웹페이지 즐겨찾기