Autumn SALE
Fasada

Fasada w języku Java

Fasada to strukturalny wzorzec projektowy wyposażający złożony system klas, bibliotekę lub framework w uproszczony interfejs.

Fasada zmniejsza ogólną złożoność aplikacji oraz pomaga przenieść niechciane zależności w jedno miejsce w programie.

Złożoność:

Popularność:

Przykłady użycia: Wzorzec Fasada jest często stosowany w aplikacjach napisanych w Javie, szczególnie w celu współpracy ze złożonymi bibliotekami i interfejsami programowania aplikacji.

Oto przykłady użycia wzorca Fasada w głównych bibliotekach Java:

Identyfikacja: Użycie Fasady można stwierdzić po istnieniu klasy o uproszczonym interfejsie, która deleguje większość swoich zadań innym klasom. Zazwyczaj fasady zarządzają całym cyklem życia używanych przez siebie obiektów.

Prosty interfejs skomplikowanej klasy do konwersji wideo

W poniższym przykładzie Fasada upraszcza komunikację ze złożonym frameworkiem służącym konwersji filmików.

Fasada udostępnia pojedynczą klasę z jedną metodą której zadaniem jest konfiguracja odpowiednich klas frameworku oraz pobieranie wyników ich działania w odpowiednim formacie.

some_complex_media_library: Złożona biblioteka konwersji wideo

some_complex_media_library/VideoFile.java

package refactoring_guru.facade.example.some_complex_media_library; public class VideoFile { private String name; private String codecType; public VideoFile(String name) { this.name = name; this.codecType = name.substring(name.indexOf(".") + 1); } public String getCodecType() { return codecType; } public String getName() { return name; } } 

some_complex_media_library/Codec.java

package refactoring_guru.facade.example.some_complex_media_library; public interface Codec { } 

some_complex_media_library/MPEG4CompressionCodec.java

package refactoring_guru.facade.example.some_complex_media_library; public class MPEG4CompressionCodec implements Codec { public String type = "mp4"; } 

some_complex_media_library/OggCompressionCodec.java

package refactoring_guru.facade.example.some_complex_media_library; public class OggCompressionCodec implements Codec { public String type = "ogg"; } 

some_complex_media_library/CodecFactory.java

package refactoring_guru.facade.example.some_complex_media_library; public class CodecFactory { public static Codec extract(VideoFile file) { String type = file.getCodecType(); if (type.equals("mp4")) { System.out.println("CodecFactory: extracting mpeg audio..."); return new MPEG4CompressionCodec(); } else { System.out.println("CodecFactory: extracting ogg audio..."); return new OggCompressionCodec(); } } } 

some_complex_media_library/BitrateReader.java

package refactoring_guru.facade.example.some_complex_media_library; public class BitrateReader { public static VideoFile read(VideoFile file, Codec codec) { System.out.println("BitrateReader: reading file..."); return file; } public static VideoFile convert(VideoFile buffer, Codec codec) { System.out.println("BitrateReader: writing file..."); return buffer; } } 

some_complex_media_library/AudioMixer.java

package refactoring_guru.facade.example.some_complex_media_library; import java.io.File; public class AudioMixer { public File fix(VideoFile result){ System.out.println("AudioMixer: fixing audio..."); return new File("tmp"); } } 

facade

facade/VideoConversionFacade.java: Fasada udostępnia prosty interfejs służący konwersji filmików

package refactoring_guru.facade.example.facade; import refactoring_guru.facade.example.some_complex_media_library.*; import java.io.File; public class VideoConversionFacade { public File convertVideo(String fileName, String format) { System.out.println("VideoConversionFacade: conversion started."); VideoFile file = new VideoFile(fileName); Codec sourceCodec = CodecFactory.extract(file); Codec destinationCodec; if (format.equals("mp4")) { destinationCodec = new MPEG4CompressionCodec(); } else { destinationCodec = new OggCompressionCodec(); } VideoFile buffer = BitrateReader.read(file, sourceCodec); VideoFile intermediateResult = BitrateReader.convert(buffer, destinationCodec); File result = (new AudioMixer()).fix(intermediateResult); System.out.println("VideoConversionFacade: conversion completed."); return result; } } 

Demo.java: Kod klienta

package refactoring_guru.facade.example; import refactoring_guru.facade.example.facade.VideoConversionFacade; import java.io.File; public class Demo { public static void main(String[] args) { VideoConversionFacade converter = new VideoConversionFacade(); File mp4Video = converter.convertVideo("youtubevideo.ogg", "mp4"); // ... } } 

OutputDemo.txt: Wynik działania

VideoConversionFacade: conversion started. CodecFactory: extracting ogg audio... BitrateReader: reading file... BitrateReader: writing file... AudioMixer: fixing audio... VideoConversionFacade: conversion completed. 

Fasada w innych językach

Fasada w języku C# Fasada w języku C++ Fasada w języku Go Fasada w języku PHP Fasada w języku Python Fasada w języku Ruby Fasada w języku Rust Fasada w języku Swift Fasada w języku TypeScript