디자인 모델 학습 의 장식 모델 과 대리 모델
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;
}
응용 장소: 원 격 에이전트: 대상 이 서로 다른 주소 공간 에 있다 는 사실 을 숨 길 수 있 습 니 다. 가상 대 리 를 통 해 오래 걸 리 는 대상 안전 대 리 를 저장 할 수 있 습 니 다. 실제 대상 의 방문 권한 을 제어 하 는 스마트 참조: 실제 대상 을 호출 할 때 다른 일 을 대리 처리 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.