디자인 모델 시 리 즈 · 추상 공장 모델

오후 잡담
회사 가 최근 에 프로젝트 가 바 쁘 지 않 아서 점심 휴식 을 취한 후에 둘 째 는 C 형 을 찾 아가 이 야 기 를 나 누 었 다.
"C 형, 뭐 가 바 빠 요?" "바 쁜 것 도 아 닌 데 그냥 구경 만 해 요."
"오, 나 도 요즘 별로 안 바 빠. 네가 지난번 에 말 해 준 공장 모델 은 이득 이 많 구나!" "하하, 그래! 사실 너 는 몰라. 추상 적 인 공장 모델 도 있어!"
"추상 적 인 공장 모델? 자세 한 이 야 기 를 듣 고 싶 어 요." "네, 어차피 요즘 바 쁘 지 않 으 니 말씀 드 리 겠 습 니 다."
아우디 차 부터
"둘째, 알 잖 아. 아우디 A4 와 A6. 그들 이 사용 하 는 타이 어 는 전구 와 다 를 거 야." "네, 모델 이 다 르 면 타이어 와 전구 가 다 를 거 예요."
"지금 A4 와 A6 의 타이어 와 전 구 를 만들어 야 한다 고 가정 하면 코드 를 어떻게 쓰 시 겠 습 니까?" "글 쎄 요. 쓰기 쉬 워 요!"
둘째 가 능숙 하 게 컴퓨터 를 켜 고 힘 을 써 서 신속하게 코드 를 썼 다.
produce_wheel();
    }
    
    //            
    public function produce_light($type){
        switch ($type){
            case 'A4':
                $obj=new AudiA4Light();
                break;
            case 'A6':
                $obj=new AudiA6Light();
                break;
            default:
                throw new Exception('no instance found');
        }
        $obj->produce_light();
    }
}
$client=new Client();
$client->produce_wheel('A4');
$client->produce_light('A4');

"C 형, 대체로 이런 생각 이에 요. 보 세 요. 맞 나 요?" "네, 이 코드 도 확실히 기능 을 실 현 했 지만 문제 가 있어 요."
"문제 가 있 습 니까? 무슨 문제 입 니까?" "이 코드 는 낮은 내부 집적, 높 은 결합 문제 가 있어 서 유지 하기 가 쉽 지 않 습 니 다."
"왜 낮은 내부 집적, 높 은 결합 이 되 었 습 니까?" 둘 째 는 망연자실 한 표정 을 지 었 다.C 형 은 당황 하지 않 고 설명 했다. 예 를 들 어 지금 나 는 아우디 의 모델 A8 을 추가 하려 고 한다. 그러면 너의 코드 안의 함수 produce_wheel()produce_light() 를 모두 고 쳐 야 하지 않 겠 니?즉, 이 두 함 수 는 서로 의존 하 는 것 으로 A6 의 바퀴 를 사용 할 수 없고 A8 의 전 구 를 사용 할 수 없다.서로 의존 하 는 것 은 높 은 결합 을 위 한 것 이다.produce_wheel()produce_light() 함수, 이 두 함 수 는 모두 자신 이 어떤 모델 의 제품 을 필요 로 하 는 지 에 관심 을 가지 고 해당 하 는 제품 을 생산 하 는 것 을 책임 진다.즉, 그 는 모델 에 관심 을 가지 고 서로 다른 모델 에 따라 해당 하 는 제품 을 생산 하 는 두 가지 직책 을 가진다.그러나 이 두 직책 은 아무런 관련 이 없고 반 푼 의 관계 가 없다.직책 이 너무 많 고 분산 되 는 것 은 낮은 내부 집적 을 위 한 것 이다.
이 어 "C 형 이 그렇게 말 하 니 정말 그런 것 같다" 며 "하하, 낮은 내부 집적 과 높 은 결합 코드 도 수 요 를 이 룰 수 있 지만 이런 코드 는 유지 하기 어렵다" 고 덧 붙 였 다.
"응응, C 형, 무슨 좋 은 방법 이 있어?" "당연히 있 지. 우 리 는 추상 적 인 공장 모델 을 사 용 했 지."
추상 적 인 공장 모델 이 나타나다.
"제 다년간 의 경험 에 따 르 면 switch 문구 가 나 온 곳 은 추상 적 이거 나 잘못 놓 은 책임 이 필요 하 다 는 것 을 의미 합 니 다." "소중 한 경험 을 적 었 습 니 다!"
"둘째 야, 사실 여기 책임 을 잘못 둔 거 야." "응, 뭐라고 해 야 되 지?"
이 어 "클 라 이언 트 측은 대상 을 만 드 는 방법 에 도 관심 을 갖 고 있 으 며, 대상 으로 바퀴, 전 구 를 만 드 는 방법 에 도 관심 을 갖 고 있다" 며 "네, 그의 책임 이 너무 많 습 니 다."
이 어 "사실 클 라 이언 트 측은 사용 대상 이 해당 제품 을 만 드 는 것 만 책임 지면 된다" 며 "그 는 창조 대상 을 책임 질 필요 가 없다. 창조 대상 을 클 라 이언 트 측 에 맡 기 는 것 은 잘못 놓 은 것" 이 라 며 "맞 아, 그 렇 긴 하 다" 고 덧 붙 였 다.
이 어 "며칠 전에 말씀 드 린 공장 모델 을 기억 하 시 나 요? 공장 모델 도 이 문 제 를 해결 하기 위해 서 였 다" 며 "공장 모델 도 책임 의 분 리 를 실현 하기 위해 서 였 던 것 으로 기억한다" 고 덧 붙 였 다.
"공장 모델 은 한 제품 에 대해 공장 류 를 제공 하고 추상 적 인 공장 모델 은 관련 되 거나 서로 의존 하 는 제품 에 대해 공장 류 를 제공 하 는 것 이다." "그 추상 적 인 공장 모델 은 바로 공장 모델 의 업그레이드 버 전 이다!"
"예. 여기 서 클 라 이언 트 측은 Factory 에 요청 을 하고 Factory 는 관련 대상 으로 돌아 가 며 클 라 이언 트 측은 Factory 가 돌아 오 는 대상 에 따라 관련 제품 을 만 듭 니 다." "즉, 클 라 이언 트 는 사용 대상 을 책임 지고 Factory 는 생 성 대상 을 책임 집 니 다!"
"네, 둘 째 는 똑똑 하 잖 아 요. 추상 적 인 공장 모델 의 유형 도 를 보 세 요!" "네, C 형."
추상 적 인 공장 모델 로 문 제 를 해결 하 다.
"둘째 야, 너 에 게 이렇게 많은 이 야 기 를 했 으 니 이제 너 를 볼 거 야!" "그래, C 형, 내 가 바로 아 이 템 을 그 려 서 코드 를 쓸 게."
둘 째 는 C 형의 유 도 를 본 떠 추상 적 인 공장 으로 위의 문 제 를 해결 하 는 유 도 를 그 렸 다.아 날로 그 를 잘 그리 면 코드 도 쓰기 쉽다!
";
    }
}
//  A6    
class AudiA6Light implements Light{
    public function produce_light()
    {
        echo "AudiA6 Light produced!
"; } } // interface Wheel{ public function produce_wheel(); } // A4 class AudiA4Wheel implements Wheel { public function produce_wheel() { echo "AudiA4 Wheel produced!
"; } } // A6 class AudiA6Wheel implements Wheel { public function produce_wheel() { echo "AudiA6 Wheel produced!
"; } } // interface Factory{ public function CreateWheel(); public function CreateLight(); } // A4 class A4Factory implements Factory { public function CreateWheel() { return new AudiA4Wheel(); } public function CreateLight() { return new AudiA4Light(); } } // A6 class A6Factory implements Factory { public function CreateWheel() { return new AudiA6Wheel(); } public function CreateLight() { return new AudiA6Light(); } } // class Client{ // public static function main($type){ $reflection=new ReflectionClass($type.'Factory'); $factory=$reflection-?>newInstance(); self::run($factory); } // public static function run(Factory $factory){ $wheel=$factory->CreateWheel(); $wheel->produce_wheel(); $light=$factory->CreateLight(); $light->produce_light(); } } Client::main('A6');

새로운 스 킬 을 획득
"음, 둘째 괜 찮 네. 간단 한 공장, 공장 방법, 추상 적 인 공장 모델 을 다 익 혔 어." "하하, C 형의 가르침 에 감사 해!"
"디자인 모드 몬스터 처치 승급 길에서 새로운 스 킬 을 다시 획득 한 것 을 축하합니다!"
이 말 을 듣 고 둘 째 는 마음 이 흐뭇 하고 입가 에 만 족 스 러 운 미 소 를 지 었 습 니 다.
전재 성명: 본 고 는 공식 번호 인 '대화 코드' 에서 시작 하여 'talkpoem' 을 검색 하면 주목 할 수 있 습 니 다.
'대화 코드' 에 관심 을 가지 고 '왼손 코드 오른손 시' 에 대해 이야기 합 시다.

좋은 웹페이지 즐겨찾기