A homlokzati minta (vagy homlokzati minta) az objektumorientált programozásban általánosan használt szoftvertervezési minta. Az elnevezés az építészeti homlokzat analógiájára született.
A homlokzat olyan objektum, amely egyszerűsített interfészt biztosít egy nagyobb kódtesthez, például egy osztálykönyvtárhoz. Egy homlokzat lehet:
- egy szoftverkönyvtárat könnyebben használhatóvá, érthetőbbé és tesztelhetőbbé tehet, mivel a homlokzat kényelmes módszereket tartalmaz a gyakori feladatokhoz;
- ugyanezen okból olvashatóbbá teheti a könyvtárat;
- csökkentheti a külső kód függőségét a könyvtár belső működésétől, mivel a legtöbb kód a homlokzatot használja, így nagyobb rugalmasságot tesz lehetővé a rendszer fejlesztésében;
- egy rosszul megtervezett API-gyűjteményt egyetlen jól megtervezett API-val csomagolhat be.
A homlokzat tervezési mintát gyakran használják, ha egy rendszer nagyon összetett vagy nehezen érthető, mert a rendszer nagyszámú, egymástól függő osztállyal rendelkezik, vagy a forráskódja nem áll rendelkezésre. Ez a minta elrejti a nagyobb rendszer összetettségét, és egyszerűbb felületet biztosít az ügyfél számára. Jellemzően egyetlen burkoló osztályt tartalmaz, amely az ügyfél által igényelt tagok egy részét tartalmazza. Ezek a tagok a homlokzati kliens nevében érik el a rendszert, és elrejtik a megvalósítás részleteit.
Használat
A homlokzatot akkor használjuk, ha egy mögöttes objektumhoz egyszerűbb vagy egyszerűbb interfészre van szükség. Alternatívaként egy adapter akkor használható, ha a burkolónak tiszteletben kell tartania egy adott interfészt, és támogatnia kell a polimorf viselkedést. A dekorátor lehetővé teszi egy interfész viselkedésének hozzáadását vagy megváltoztatását futásidőben.
Pattern | Intent |
---|---|
Adapter | Konvertál egy interfészt egy másikba, hogy az megfeleljen az ügyfél elvárásainak |
Decorator | Dinamikusan hozzáad felelősséget az interfészhez az eredeti kód becsomagolásával |
Facade | Egy egyszerűsített interfészt biztosít |
A facade mintát általában akkor használják, ha:
- egy összetett rendszer eléréséhez egyszerű interfészre van szükség;
- az alrendszer absztrakciói és megvalósításai szorosan összekapcsolódnak;
- szükség van egy belépési pontra a többszintű szoftver minden szintjére; vagy
- a rendszer nagyon összetett vagy nehezen érthető.
Szerkezet
Facade: A homlokzati osztály absztrahálja az 1., 2. és 3. csomagot az alkalmazás többi részétől.Ügyfelek: Az objektumok a homlokzati mintát használják a csomagok erőforrásainak elérésére.
Példa
Ez egy absztrakt példa arra, hogy egy ügyfél (“Ön”) hogyan lép kölcsönhatásba a homlokzattal (a “számítógép”) egy komplex rendszerrel (a számítógép belső részeivel, mint a CPU és a merevlemez).
/* Complex parts */class CPU { freeze() { /* code here */ } jump(position) { /* code here */ } execute() { /* code here */ }}class Memory { load(position, data) { /* code here */ }}class HardDrive { read(lba, size) { /* code here */ }}/* Facade */class ComputerFacade { constructor() { this.processor = new CPU(); this.ram = new Memory(); this.hd = new HardDrive(); } start() { this.processor.freeze(); this.ram.load(this.BOOT_ADDRESS, this.hd.read(this.BOOT_SECTOR, this.SECTOR_SIZE)); this.processor.jump(this.BOOT_ADDRESS); this.processor.execute(); }}/* Client */let computer = new ComputerFacade();computer.start();