C++디자인 모델 의 간단 한 공장 모델 의 실현 예시

3423 단어 c\#공장 모드
머리말
우리 가 대상 을 사용 하려 면 클래스 를 통 해 대상 을 예화 해 야 한다.즉,new 대상 이 필요 하 다.new 의 과정 은 매우 복잡 합 니 다.파일 읽 기->텍스트 해석->대상 만 들 기->속성 값 설정 등 과정 을 거 쳐 야 합 니 다.그리고 공장 모델 을 도입 하 는 것 은 바로 이런 절 차 를 공장 에서 완성 하 는 것 이다.우 리 는 공장 에서 만 든 종 류 를 사용 하면 된다.공장 을 사용 할 때 우 리 는 공장 에 우리 가 원 하 는 대상 을 알려 야 하기 때문에 우 리 는 인삼 을 전달 하 는 방식 으로 공장 에 우리 의 수 요 를 알려 줄 수 있다.
정의 사상:간단 한 공장 모델 에서 매개 변수 에 따라 서로 다른 인 스 턴 스 를 되 돌 릴 수 있 습 니 다.간단 한 공장 모델 은 하나의 클래스 를 정의 하여 다른 종류의 인 스 턴 스 를 만 드 는 것 을 책임 집 니 다.만 든 인 스 턴 스 는 보통 공 통 된 부모 클래스 를 가지 고 있 습 니 다.
장점:
클 라 이언 트 와 구체 적 인 실현 류 의 결합 을 실현 했다클 라 이언 트 는 제품 대상 을 직접 만 드 는 책임 을 면제 하고'소비'제품 제품 만클 라 이언 트 는 만 든 구체 적 인 제품 류 의 유형 을 알 필요 가 없고 구체 적 인 제품 류 에 대응 하 는 매개 변수 만 알 면 된다.
단점:
  • 새로운 제품 유형 을 추가 하려 면 소스 코드 를 수정 해 야 하 며 개폐 원칙 에 부합 되 지 않 습 니 다
  • 4.567917.공장 류 에 모든 제품 류 의 창설 논리 가 집중 되 어 있 는데 만약 에 이런 종류 에 문제 가 발생 하면.전체 시스템 이 영향 을 받 아야 한다.
    적용 필드:
    4.567917.공장 류 의 설립 을 담당 하 는 대상 이 비교적 적다.
    4.567917.클 라 이언 트 는 공장 류 에 들 어 오 는 매개 변수 만 알 고 대상 을 어떻게 만 드 는 지 에 관심 이 없다.
    간단 한 공장 모델 은 개폐 원칙 에 부합 되 지 않 기 때문에 큰 사람 은 이 모델 을 24 가지 디자인 모델 에서 제거 했다.
    코드 구현(핸드폰 제품)

    먼저 추상 적 인 핸드폰 류 를 만 들 고 구체 적 인 제품 의 핸드폰 을 지정 할 때 반드시 지정 한 기능 을 가 져 야 한다.즉,제품 류 는 반드시 이런 유형의 방법 을 다시 써 야 한다.
    
    //    
    class AbstractPhone
    {
    public:
    	virtual void ShowName() = 0;
    };
    
    구체 적 인 제품 의 휴대 전 화 는 추상 적 인 휴대 전화 유형 을 계승 하여 그 방법 을 다시 쓴다.
    
    //  
    class Huawei : public AbstractPhone
    {
    public:
    	virtual void ShowName()
    	{
    		cout << "Huawe Phone" << endl;
    	}
    };
    
    //  
    class Xiaomi : public AbstractPhone
    {
    public:
    	virtual void ShowName()
    	{
    		cout << "Xiaomi Phone" << endl;
    	}
    };
    
    //  
    class Apple : public AbstractPhone
    {
    public:
    	virtual void ShowName()
    	{
    		cout << "Apple Phone" << endl;
    	}
    };
    
    들 어 오 는 매개 변 수 를 통 해 어떤 휴대 전 화 를 생 성 해 야 하 는 지 확인 합 니 다.
    
    //    
    class PhoneFactory
    {
    public:
    	static AbstractPhone* CreatePhone(string name)
    	{
    		if (name == "huawei")
    			//...    
    			return new Huawei;
    		else if (name == "xiaomi")
    			//...    
    			return new Xiaomi;
    		else if (name == "apple")
    			//...    
    			return new Apple;
    		else
    			return nullptr;
    	}
    };
    
    테스트:
    
    void test()
    {
    	//    
    	PhoneFactory* factor = new PhoneFactory;
    	//    
    	AbstractPhone* phone;
    	//           
    	phone = factor->CreatePhone("huawei");
    	phone->ShowName();
    	delete phone;
    
    	phone = factor->CreatePhone("xiaomi");
    	phone->ShowName();
    	delete phone;
    
    	phone = factor->CreatePhone("apple");
    	phone->ShowName();
    	delete phone;
    
    	delete factor;
    }
    
    캡 처 실행:

    총결산
    여기 서 C++디자인 모델 에 관 한 간단 한 공장 모델 에 관 한 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 C++간단 한 공장 모델 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기