Miután végre komolyan elkezdtem megpróbálni megtanulni néhány alapvető mintát (nagyon a karrier végén, de ez “más történet”), megpróbálom megszerezni keresse meg a gyárminta és az absztrakt gyár közötti különbségeket.
Melyek a legfontosabb különbségek e két minta között?
Megértem, hogy a gyári módszer objektumokat hoz létre öröklés útján, az absztrakt gyár pedig objektumkompozícióval, de gyakorlati szempontból még mindig nehezen tudom megismerni az egyes munkák pontos működését.
Megjegyzések
Válasz
A gyári módszer kategóriát általában egy switch utasítás kategorizálja, ahol minden eset más-más osztályt ad vissza, ugyanazon gyökérfelületet használva, így a hívó kódnak soha nem kell döntéseket hoznia a megvalósításról.
Gondoljon egy hitelkártya-hitelesítő gyárra amely minden egyes kártyatípushoz más érvényesítőt ad vissza.
public ICardValidator GetCardValidator (string cardType) { switch (cardType.ToLower()) { case "visa": return new VisaCardValidator(); case "mastercard": case "ecmc": return new MastercardValidator(); default: throw new CreditCardTypeException("Do not recognise this type"); } }
Az absztrakt gyár ahol több konkrét gyári osztály van (nem a gyári módszerek), amelyek egy interfészből származnak, és amelyek sokféle típust adhatnak vissza különböző módszerekből.
Gondolj egy másik osztályú sakkjáték-kezelőre minden variánsszabálykészlethez.
public class StandardChessRulesFactory : IChessRulesFactory { public IBoardMapper GetBoardMapper() { return new StandardChessBoardMapper(); } public IKingMover GetKingMover() { return new StandardChessKingMover(); } public IMoveClock GetMoveClock() { return new StandardMoveClock(); } } public class HexagonalChessRulesFactory : IChessRulesFactory { public IBoardMapper GetBoardMapper() { return new HexagonalChessBoardMapper(); } public IKingMover GetKingMover() { return new HexagonalChessKingMover(); } public IMoveClock GetMoveClock() { return new StandardMoveClock(); } } public class SpeedChessRulesFactory : IChessRulesFactory { public IBoardMapper GetBoardMapper() { return new StandardChessBoardMapper(); } public IKingMover GetKingMover() { return new StandardChessKingMover(); } public IMoveClock GetMoveClock() { return new SpeedChessMoveClock(); } }
Absztrakt gyár , hasonlóan a stratégiához, gyakran gyári módszerrel választják ki, de ezeket nem szükséges kombinálni, így ez a saját mintája.
Megjegyzések
- Helyes a gyári módszer magyarázata? Mit ' jelent a " A gyári módszer mintája öröklődésre támaszkodik, mivel az objektum létrehozása olyan alosztályokra van delegálva , amelyek valósítsa meg a gyári módszert objektumok " létrehozására. Tehát a példa inkább hasonlít a Statikus Gyárra.
- @SerG Nos, a tisztesség kedvéért ' felvette ezt az idézetet a Wikipédiából, egy olyan oldalon, amely nagyon olvasott három évvel ezelőtt másként. Azt állítom, hogy a Wikipédia jelenlegi oldala több helyen ellentmond önmagának, de nem vágyom arra, hogy részt vegyek ennek szétválasztásában. Amit utólag elismernék, az az, hogy az itt megadott p ' ve egy speciális típusú gyári módszer, amelyet Parameterized Factory Method néven ismerünk. De a gyári módszer és az absztrakt gyár közötti különbségre vonatkozó pont a gyári módszer minden típusában fennáll.
- Ugyanaz az állítás létezik, mint az én idézetem . a GoF " tervezési mintákban ". És a Parameterized FM-t is leírják ott.
- A fontos rész az, hogy a gyár az adott helyzettől függően megfelelő objektumot ad a hívónak, és a hívó nem ' t-nek tudnia kell, hogy pontosan mi az adott objektum osztálya, és nem kell ' tudnia, hogy az adott objektum hogyan lett kiválasztva, amennyiben az objektum támogatja azt az interfészt, amelyet a
- A válaszában egyértelműen meg kell jelölnie, hogy példája nem tipikus gyári módszer mintázat, hanem valamilyen paraméterezett gyári módszer nevű szakterület. És írjon a tipikus gyári módszer meghatározásáról, mert ez most félrevezető. Most tanultam a gyári módszer mintájáról, mindent megértettem, majd elolvastam azt a választ, amely a gyári módszer mintáját valami másként mutatja, és zavart voltam. Nincs információ arról, hogy ez a példa nem tipikus gyári módszer. Köszönet SerG-nek, hogy ezt megjegyezte.
new
nem ' ta módszer (egyes – bevallottan gyakori – objektumrendszerekben).