Que ce soit dans la vie réelle ou dans le processus de développement de logiciels, les gens rencontrent souvent une telle situation : ils doivent gérer plusieurs objets, par exemple, lorsque les utilisateurs assemblent leurs propres ordinateurs, ils doivent acheter du matériel tel que des moniteurs, des cartes mères, des disques durs, mémoire et CPU Équipement, le processus d'assemblage est lourd et il peut y avoir une incompatibilité d'équipement, et l'achat direct d'un ordinateur qui a été assemblé par des professionnels peut éviter ces problèmes. Nous n'avons pas besoin d'acheter d'équipement et un ordinateur complet peut être obtenu auprès d'assembleurs d'ordinateurs professionnels. En raison de l'émergence des assembleurs d'ordinateurs, l'interaction entre les utilisateurs et plusieurs appareils est simplifiée, de sorte que les utilisateurs peuvent les utiliser sans se soucier des détails d'assemblage des appareils. Ici, les assembleurs d'ordinateurs agissent comme une "classe de façade" que nous appelons Un rôle qui simplifie le processus d'interaction entre un utilisateur et plusieurs objets. Le motif basé sur cette idée de conception s'appelle " Modèle d'apparence "
Définition pensée : Pour fournir une entrée unifiée pour un ensemble d'interfaces dans le sous-système, le mode extérieur définit une interface de haut niveau, ce qui rend le sous-système plus facile à utiliser. La communication externe avec les sous-systèmes peut se faire via un objet de façade unifié
Avantages :
- Protège les composants du sous-système des clients, réduisant ainsi le nombre d'objets gérés par les clients et facilitant l'utilisation du sous-système
- Une relation faiblement couplée entre les sous-systèmes et les clients est réalisée
Inconvénients :
- Les clients ne peuvent pas être bien limités dans l'utilisation des classes de sous-systèmes, ce qui réduit la variabilité et la flexibilité si elles sont trop restrictives
- L'ajout d'un nouveau sous-système peut nécessiter la modification du code de la classe d'apparence ou du client, ce qui viole le "principe d'ouverture et de fermeture"
Scénarios applicables :
- Utilisez le modèle de façade lorsque vous souhaitez fournir une interface simple à un sous-système complexe
Cas : Réaliser l'application du mode d'apparence home cinéma (chaque produit fournit un fonctionnement marche/arrêt)
Réaliser le mode KTV : TV allumée, lumières éteintes, audio allumé, microphone allumé, dvd allumé
Mise en œuvre du code :
chaque produit fournit une méthode marche/arrêt
//电视类
class Television
{
public:
void On()
{
cout << "电视打开" << endl;
}
void Off()
{
cout << "电视关闭" << endl;
}
};
//灯类
class Light
{
public:
void On()
{
cout << "灯打开" << endl;
}
void Off()
{
cout << "灯关闭" << endl;
}
};
//音响类
class Audio
{
public:
void On()
{
cout << "音响打开" << endl;
}
void Off()
{
cout << "音响关闭" << endl;
}
};
//麦克风类
class Microphone
{
public:
void On()
{
cout << "麦克风打开" << endl;
}
void Off()
{
cout << "麦克风关闭" << endl;
}
};
//dvd类
class DvdPlayer
{
public:
void On()
{
cout << "DVD打开" << endl;
}
void Off()
{
cout << "DVD关闭" << endl;
}
};
Dans un objet de façade, pour gérer la fonctionnalité des produits de l'organisation
class KTVMode
{
public:
KTVMode()
{
pTv = new Television;
pLight = new Light;
pAudio = new Audio;
pMicrophone = new Microphone;
pDvd = new DvdPlayer;
}
~KTVMode()
{
delete pTv;
delete pLight;
delete pAudio;
delete pMicrophone;
delete pDvd;
}
//打开ktv
void OnKty()
{
pTv->On();
pLight->Off();
pAudio->On();
pMicrophone->On();
pDvd->On();
}
//关闭ktv
void OffKty()
{
pTv->Off();
pLight->On();
pAudio->Off();
pMicrophone->Off();
pDvd->Off();
}
private:
Television* pTv;
Light* pLight;
Audio* pAudio;
Microphone* pMicrophone;
DvdPlayer* pDvd;
};
Exécutez la capture d'écran :