Kontakt
EN
Biznes, Dedykowane aplikacje, Programowanie

Most: Oddzielenie Abstrakcji od Implementacji w Projektowaniu

Wprowadzenie do Wzoru Projektowego "Most"

Wzorzec projektowy most (ang. Bridge) to strukturalny wzorzec, który pozwala oddzielić abstrakcję od implementacji, umożliwiając ich niezależne rozwijanie. Jest szczególnie przydatny, gdy mamy do czynienia z dużymi klasami, których kod jest trudny w utrzymaniu i rozbudowie. Dzięki zastosowaniu wzorca mostu, możemy łatwiej zarządzać kodem i dodawać nowe funkcjonalności.

Problem: Rosnąca Złożoność Klas

Wyobraź sobie, że tworzysz system płatności online. System ten musi obsługiwać różne metody płatności, takie jak karta kredytowa i PayPal, oraz różne środowiska uruchomieniowe, takie jak aplikacje webowe i mobilne. Początkowo system obsługuje tylko karty kredytowe w aplikacjach webowych. Z czasem dodajesz obsługę PayPala i aplikacji mobilnej. Kod stopniowo staje się coraz bardziej skomplikowany, a każda nowa funkcjonalność znacznie zwiększa złożoność istniejących klas.

Rozwiązanie: Wzorzec Mostu

Wzorzec mostu proponuje rozdzielenie klasy na dwie hierarchie: abstrakcję oraz implementację. Abstrakcja definiuje wysokopoziomowe operacje, a implementacja zawiera konkretne sposoby działania tych operacji.

Przykład Kodowy

Rozważmy przykładowy kod, który demonstruje zastosowanie wzorca mostu w kontekście systemu płatności online:

# Interfejs implementacji płatności
class PaymentImplementor:
    def process_payment(self, amount):
        pass

# Implementacja płatności za pomocą karty kredytowej
class CreditCardPayment(PaymentImplementor):
    def process_payment(self, amount):
        return f"Processing credit card payment of {amount}."

# Implementacja płatności za pomocą PayPal
class PayPalPayment(PaymentImplementor):
    def process_payment(self, amount):
        return f"Processing PayPal payment of {amount}."

# Abstrakcja systemu płatności
class PaymentSystem:
    def __init__(self, implementor: PaymentImplementor):
        self.implementor = implementor

    def pay(self, amount):
        return self.implementor.process_payment(amount)

# Przykładowe zastosowanie mostu
if __name__ == "__main__":
    # Płatność kartą kredytową w aplikacji webowej
    web_credit_payment = PaymentSystem(CreditCardPayment())
    print(web_credit_payment.pay(100))

    # Płatność PayPal w aplikacji mobilnej
    mobile_paypal_payment = PaymentSystem(PayPalPayment())
    print(mobile_paypal_payment.pay(200))

Analogia: System Płatności Online

W naszym przykładzie zastosowaliśmy wzorzec mostu, aby oddzielić metody płatności (implementacje) od systemu, który ich używa (abstrakcja). Dzięki temu możemy niezależnie rozwijać nowe metody płatności i różne systemy (webowe, mobilne) bez modyfikowania istniejącego kodu. W ten sposób tworzymy bardziej elastyczne i łatwiejsze w utrzymaniu rozwiązanie.

Przypadki Użycia

Wzorzec mostu jest szczególnie użyteczny w następujących sytuacjach:

  • Gdy masz do czynienia z klasami, które mają wiele wariantów operacji.
  • Gdy chcesz oddzielić wysokopoziomową abstrakcję od jej realizacji, aby były one rozwijane niezależnie.
  • Gdy chcesz uniknąć dublowania kodu przy dodawaniu nowych funkcji.

Podsumowanie

Wzorzec mostu pozwala oddzielić abstrakcję od implementacji, co prowadzi do bardziej przejrzystego, elastycznego i łatwiejszego w utrzymaniu kodu. Przykład systemu płatności online ilustruje, jak można zastosować ten wzorzec w praktyce, aby obsługiwać różne metody płatności i środowiska uruchomieniowe niezależnie od siebie.

Wprowadzenie wzorca mostu do swojego projektu może wymagać pewnych modyfikacji, ale korzyści z tytułu większej modularności i elastyczności kodu są tego warte.

Privacy Settings
We use cookies to enhance your experience while using our website. If you are using our Services via a browser you can restrict, block or remove cookies through your web browser settings. We also use content and scripts from third parties that may use tracking technologies. You can selectively provide your consent below to allow such third party embeds. For complete information about the cookies we use, data we collect and how we process them, please check our Privacy Policy
Youtube
Consent to display content from - Youtube
Vimeo
Consent to display content from - Vimeo
Google Maps
Consent to display content from - Google
Spotify
Consent to display content from - Spotify
Sound Cloud
Consent to display content from - Sound
Kontakt z nami
EN