디자인 모델 학습 의 장식 모델 과 대리 모델

4000 단어
디자인 모델 을 배 우 는 과정 은 교체 하 는 과정 이 어야 한다. 물건 을 배 울 때 한 번 추구 하지 않 고 철저히 파악 하고 이해 해 야 한다 (많은 상황 도 불가능 하 다).책 을 읽 으 면 이해 하지 못 하고 생각 이 이해 되 지 않 으 면 반복 해서 읽 고 생각 할 수 있다.실전 경험 이 적 고 책 에서 제시 한 예 도 유한 하기 때문에 디자인 모델 의 학습 은 먼저 책의 예 에 따라 이해 할 수 있 고 진정 으로 응용 할 때 뒤의 실천 에서 이런 사 고 를 고려 하 는 과정 에 융합 시 키 려 고 시도 할 수 있다.먼저 이런 모델 들 을 대충 알 아 보 세 요. 지금 은 실전 에 한계 가 있 기 때문에 많은 모델 들 이 표면적 으로 만 체험 할 수 있 습 니 다. 나중에 시간 이 있 으 면 다시 고 개 를 돌려 다시 공부 하면 더욱 깊 은 경험 을 할 수 있 습 니 다.
1. 장식 모델 정의: 동태 적 으로 한 대상 에 게 추가 적 인 직책 (중요 하지 않 은 기능, 우연히 한 번 실 행 될 뿐) 을 추가 하면 기능 을 증가 하 는 데 있어 장식 모델 은 하위 클래스 를 생 성 하 는 것 보다 더욱 유연 하 다.건설 과정 이 불안정 하여 정확 한 순서에 따라 연결 하여 제어 한다.
설명: 오래된 클래스 에 새 코드 를 추가 할 때 핵심 직책 이나 주요 행 위 를 추가 하기 위해 서 입 니 다.그리고 특정한 상황 에서 만 실 행 될 수 있 는 특정한 기능 을 추가 해 야 할 때 (간단하게 핵심 응용 기능 이 아 닌 지) 유형의 복잡 도 를 증가 할 수 있다.장식 모드 는 추가 할 추가 기능 을 각각 단독 클래스 에 넣 고 이 클래스 에 장식 할 대상 을 포함 시 키 는 것 이다. 실행 이 필요 할 때 클 라 이언 트 는 장식 기능 포장 대상 을 선택 적 이 고 순서대로 사용 할 수 있다.장식 모델 은 포장 대상 에 사용 되 는 것 이다. 모든 장식 대상 의 실현 은 이 대상 을 어떻게 사용 하 는 지 와 분리 된다. 모든 장식 대상 은 자신의 기능 에 만 관심 을 가지 고 대상 체인 에 어떻게 추가 하 는 지 에 관심 을 가 질 필요 가 없다. 장식 모델 은 기 존의 기능 동태 에 더 많은 기능 을 추가 하 는 방식 이다.
실례:
#include <string>
#include <iostream>
using namespace std;
// 
class Person
{
private:
	string m_strName;
public:
	Person(string strName)
	{
		m_strName=strName;
	}
	Person(){}
	virtual void Show()
	{
		cout<<"    :"<<m_strName<<endl;
	}
};
//   
class Finery :public Person
{
protected:
	Person* m_component;
public:
	void Decorate(Person* component)
	{
		m_component=component;
	}
	virtual void Show()
	{
		m_component->Show();
	}
};
//T  
class TShirts: public Finery
{
public:
	virtual void Show()
	{
		cout<<"T Shirts"<<endl;
		m_component->Show();
	}
};
//  
class BigTrouser :public Finery
{
public:
	virtual void Show()
	{
		cout<<"Big Trouser"<<endl;
		m_component->Show();
	}
};
//   
int main()
{
	Person *p=new Person("  ");
	BigTrouser *bt=new BigTrouser();
	TShirts *ts=new TShirts();
	bt->Decorate(p);
	ts->Decorate(bt);
	ts->Show();
	return 0;
}

 
응용 장소: 시스템 이 낡은 클래스 에 새로운 코드 를 추가 하여 새로운 기능 을 실현 할 때 이런 새로운 코드 는 특정한 상황 에서 만 실 행 될 수 있 는 특수 행위 의 수 요 를 만족 시 키 기 위해 서 이다. 장식 모델 은 모든 장식 할 기능 을 단독 클래스 에 두 고 이런 종류의 포장 을 장식 할 대상 으로 하기 때문에 특수 행 위 를 수행 해 야 할 때클 라 이언 트 코드 는 실행 할 때 필요 에 따라 선택 적 이 고 순서대로 장식 기능 포장 대상 을 사용 할 수 있다.
장점: 유형 중의 장식 기능 을 유형 에서 옮 기 고 기 존의 유형 을 간소화 하 며 유형의 핵심 직책 과 장식 기능 을 효과적으로 구분 할 수 있 으 며 관련 유형 에서 중복 되 는 장식 논 리 를 제거 할 수 있다.
2. 프 록 시 모드 정의: 이 대상 에 대한 접근 을 제어 하기 위해 다른 대상 에 게 프 록 시 를 제공 합 니 다.
설명: 대리 모델 은 대상 을 방문 할 때 어느 정도 의 간접 성 을 도입 하 는 것 이다. 이런 간접 성 을 통 해 여러 가지 용 도 를 부가 하고 대 리 는 실제 대상 의 대표 이다.
실례:
#include <string>
#include <iostream>
using namespace std;
//    
class Interface
{
public:
	virtual void Request()=0;
};
//   
class RealClass : public Interface
{
public:
	virtual void Request()
	{
		cout<<"     "<<endl;
	}
};
//   
class ProxyClass : public Interface
{
private:
	RealClass* m_realClass;
public:
	virtual void Request()
	{
		m_realClass= new RealClass();
		m_realClass->Request();
		delete m_realClass;
	}
};
//   :
int main()
{
	ProxyClass* test=new ProxyClass();
	test->Request();
	return 0;
}

응용 장소: 원 격 에이전트: 대상 이 서로 다른 주소 공간 에 있다 는 사실 을 숨 길 수 있 습 니 다. 가상 대 리 를 통 해 오래 걸 리 는 대상 안전 대 리 를 저장 할 수 있 습 니 다. 실제 대상 의 방문 권한 을 제어 하 는 스마트 참조: 실제 대상 을 호출 할 때 다른 일 을 대리 처리 합 니 다.

좋은 웹페이지 즐겨찾기