Grundprinciper för komposition
Svep för att visa menyn
Komposition fokuserar på att bygga komplexa objekt genom att kombinera enklare, oberoende komponenter. Istället för att förlita sig på arv, vilket skapar stela hierarkier, möjliggör komposition att klasser samarbetar genom inneslutna objekt. Detta tillvägagångssätt gör systemen mer flexibla, modulära och lättare att underhålla, eftersom komponenter kan bytas ut eller utökas utan att hela strukturen bryts.
123456789101112131415161718192021222324252627282930313233class Payment: def pay(self, amount): return f"Paid {amount}" class Inventory: def reserve(self, item): return f"{item} reserved" class Shipping: def ship(self, item): return f"{item} shipped" class Order: def __init__(self, item, price, payment, inventory, shipping): self.item = item self.price = price self.payment = payment self.inventory = inventory self.shipping = shipping def process(self): return " | ".join([ self.inventory.reserve(self.item), self.payment.pay(self.price), self.shipping.ship(self.item) ]) order = Order("Laptop", 1200, Payment(), Inventory(), Shipping()) print(order.process())
Order implementerar inte själv logiken för betalning, lager eller leverans.
Istället har den separata objekt (Payment, Inventory, Shipping) och använder dem för att utföra sitt arbete.
Varje komponent har ett ansvar, och Order koordinerar endast dessa.
Om du vill ändra hur betalning eller leverans fungerar kan du byta ut komponenten utan att ändra klassen Order.
Några fallgropar att se upp för vid användning av komposition är att skapa gudobjekt som samlar för många komponenter och blir svåra att hantera, läckande komponent-API:er genom den yttre klassen istället för att behålla ett rent gränssnitt, samt att introducera dold koppling när komponenter är för beroende av varandras interna detaljer.
Ett god-objekt försöker göra för mycket. Det innehåller många komponenter och hanterar många ansvarsområden, vilket gör klassen svår att förstå, testa och underhålla.
Detta inträffar när den yttre klassen exponerar de interna metoderna eller attributen hos sina komponenter. Istället för att erbjuda ett eget tydligt gränssnitt tvingar den användare att interagera direkt med interna objekt.
Komponenter blir tätt sammankopplade genom interna detaljer. Att ändra en del kan oväntat förstöra en annan eftersom de är beroende av varandras interna struktur istället för tydliga kontrakt.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal