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

  • stackoverflow.com/questions/1001767/…
  • A tisztázás érdekében a " Gyári módszer ", amikor azt mondja, hogy " Gyári minta "? Ha a Négy minta bandájáról beszélsz, akkor nincs gyári minta, de vannak absztrakt tényezők y és Gyári módszer.
  • Igen – Gyári módszer.
  • Igazság szerint a két mondat meglehetősen gyakran felcserélődik.
  • Ah, Gyári módszer. Megkerülő megoldás annak a ténynek, hogy new nem ' ta módszer (egyes – bevallottan gyakori – objektumrendszerekben).

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.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük