1 / 58

6. előadás

Szoftvertechnológia. 6. előadás. Tervezési minták. Eddig Singleton (Egyke) Simple Factory Ma Adapter (Illesztő) Bridge (Híd) Composite (Összetétel) Observer (Megfigyelő) Strategy Dependency injection Template Method (Sablonfüggvény) MVC,MVP. Adapter - Illesztő.

Download Presentation

6. előadás

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Szoftvertechnológia 6. előadás Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  2. Tervezési minták Eddig Singleton (Egyke) SimpleFactory Ma Adapter (Illesztő) Bridge (Híd) Composite (Összetétel) Observer (Megfigyelő) Strategy Dependencyinjection TemplateMethod (Sablonfüggvény) MVC,MVP Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  3. Adapter - Illesztő • A cél egy olyan új osztály/objektum létrehozása, ami a korábbi osztály felhasználásával megvalósít egy elvárt új interfészt • Például: a korábbi osztály rendelkezik Vezetéknév és Utónév tulajdonságokkal, de Teljesnév tulajdonsággal nem, és nekünk erre a tulajdonságra van szükségünk • Megvalósítási módok • Öröklődés • Beágyazás • Kiegészítés • Bővítő metódus Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  4. Megoldás öröklődéssel publicclassAlap { publicAlap(string V, string U) { Vezetéknév = V; Utónév = U; } public string Vezetéknév{ get; set; } public string Utónév { get; set;} } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  5. Megoldás öröklődéssel publicclassLeszármazott:Alap { publicLeszármazott(string V, stringU):base(V,U){} publicstringTeljesnév { get{ return Vezetéknév + " " + Utónév; } } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  6. Megoldás öröklődéssel staticvoid Main(string[] args) { Leszármazott l = newLeszármazott("Duli", "Fuli"); Console.WriteLine(l.Teljesnév); Console.ReadLine(); } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  7. Megoldás beágyazással publicclassBeágyazott { Alap Alap; publicstringTeljesnév { get{ returnAlap.Vezetéknév + " " + Alap.Utónév; } } publicstring Vezetéknév { get{ returnAlap.Vezetéknév; } set{ Alap.Vezetéknév = value; } } publicstring Utónév { get{ returnAlap.Utónév; } set{ Alap.Utónév = value; } } publicBeágyazott(string V,string U) { Alap = newAlap(V,U); } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  8. Megoldás beágyazással staticvoid Main(string[] args) { Beágyazott b = newBeágyazott("Zsákos", "Bilbó"); Console.WriteLine(b.Teljesnév); Console.ReadLine(); } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  9. Megoldás kiegészítéssel publicpartialclass Alap { publicAlap(string V, string U) { Vezetéknév = V; Utónév = U; } public string Vezetéknév { get; set; } public string Utónév { get; set; } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  10. Megoldás kiegészítéssel publicpartialclass Alap { publicstringTeljesnév { get { return Vezetéknév + " " + Utónév; } } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  11. Megoldás kiegészítéssel staticvoid Main(string[] args) { Alapa = new Alap("Zsákos", "Frodó"); Console.WriteLine(a.Teljesnév); Console.ReadLine(); } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  12. Megoldás bővítő metódussal Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  13. Megoldás bővítő metódussal publicsealedclass Alap { publicAlap(string V, string U) { Vezetéknév = V; Utónév = U; } public string Vezetéknév { get; set; } public string Utónév { get; set; } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  14. Megoldás bővítő metódussal publicstaticclass Bővítő { public static string Teljesnév(this Alap a) { returna.Vezetéknév + " " + a.Utónév; } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  15. Bridge - Híd Forrás: http://www.codeproject.com/Articles/434352/Understanding-and-Implementing-Bridge-Pattern-in-C • Egy képzeletbeli okos TV, amivel nézhetünk • Kábel TV-t • Műholdas adást • IPTV-t • A felhasználó lekérheti a műsort (Guide) és indíthatja a kiválasztott műsorforrás megtekintését • Absztrakció:műsor lekérés, indítás • Minden műsorforrás esetén más a megvalósítás Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  16. Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  17. Interfész interfaceIVideoSource { stringGetTvGuide(); stringPlayVideo(); } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  18. Megvalósítás classLocalCabelTv : IVideoSource { conststring SOURCE_NAME = "Local Cabel TV"; stringIVideoSource.GetTvGuide() { returnstring.Format("Getting TV guidefrom - {0}", SOURCE_NAME); } stringIVideoSource.PlayVideo() { returnstring.Format("Playing - {0}", SOURCE_NAME); } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  19. LocalDishTv classLocalDishTv: IVideoSource { conststring SOURCE_NAME = "Local DISH TV"; stringIVideoSource.GetTvGuide() { returnstring.Format("Getting TV guidefrom - {0}", SOURCE_NAME); } stringIVideoSource.PlayVideo() { returnstring.Format("Playing - {0}", SOURCE_NAME); } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  20. IPTvService classIPTvService: IVideoSource { conststring SOURCE_NAME = "IP TV"; stringIVideoSource.GetTvGuide() { returnstring.Format("Getting TV guidefrom - {0}", SOURCE_NAME); } stringIVideoSource.PlayVideo() { returnstring.Format("Playing - {0}", SOURCE_NAME); } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  21. RefinedAbstraction classMySuperSmartTV { IVideoSourcecurrentVideoSource = null; publicIVideoSourceVideoSource { get { returncurrentVideoSource; } set{ currentVideoSource = value;} } publicvoidShowTvGuide() { if (currentVideoSource != null) { Console.WriteLine(currentVideoSource.GetTvGuide()); } else { Console.WriteLine("Pleaseselect a Video SourcetogetTV"+ " guidefrom"); } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  22. RefinedAbstraction publicvoidPlayTV() { if(currentVideoSource != null) { Console.WriteLine(currentVideoSource.PlayVideo()); } else { Console.WriteLine( "Pleaseselect a Video Sourceto play"); } } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  23. classSuperSmartTvController { staticvoid Main(string[] args) { MySuperSmartTVmyTv = newMySuperSmartTV(); Console.WriteLine("Select A sourcetoget TV Guide and Play"); Console.WriteLine("1. Local Cable TV\n2. Local Dish TV\n3. IP TV"); ConsoleKeyInfoinput = Console.ReadKey(); switch(input.KeyChar) { case '1': myTv.VideoSource = newLocalCabelTv(); break; case'2': myTv.VideoSource = newLocalDishTv(); break; case'3': myTv.VideoSource = newIPTvService(); break; } myTv.ShowTvGuide(); myTv.PlayTV(); } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  24. Futás Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  25. Composite - Összetétel Forrás: MathiasBartoll, NoriAhari, Oliver C. Moldez: Design Patternsin C# Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  26. Az összetétel minta szerkezete Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  27. Implemen-táció Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  28. line osztálylevél Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  29. Picture osztálycsomópont Picture osztály Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  30. Observer - Megfigyelő Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  31. Közzétevő osztály Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  32. Megfigyelő (feliratkozó) Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  33. Fel/leiratkozás Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  34. Strategy - stratégia Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  35. Megoldások/stratégiák Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  36. Illesztő modul Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  37. Használat Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  38. DependencyInjection • Interfész konkrét osztálynév helyett • A Client csak az IService interfészről kell tudjon, az azt megvalósító Service osztály nevét nem kell ismerje • Megoldások • ConstructorInjection • Property (Setter) Injection • MethodInjection Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  39. ConstructorInjectionA szolgáltatást nyújtó osztály publicinterfaceIService { voidServe(); } publicclassService : IService { publicvoidServe() { Console.WriteLine("Service Called"); //ToDo: SomeStuff } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  40. Az ügyfél osztály publicclassClient { privateIService _service; publicClient(IService service) { this._service = service; } publicvoid Start() { Console.WriteLine("Service Started"); this._service.Serve(); //ToDo: SomeStuff } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  41. Használat class Program {static void Main(string[] args) { client = new Client(new Service()); client.Start(); Console.ReadKey(); } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  42. Property(Setter) InjectionA szolgáltatást nyújtó osztály publicinterfaceIService { voidServe(); } publicclassService : IService { publicvoidServe() { Console.WriteLine("Service Called"); //ToDo: SomeStuff } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  43. Az ügyfél osztály publicclassClient { privateIService _service; publicIService Service { set { this._service = value; } } publicvoid Start() { Console.WriteLine("Service Started"); this._service.Serve(); //ToDo: SomeStuff } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  44. Használat class Program { static void Main(string[] args) { Client client = new Client(); client.Service= new Service(); client.Start(); Console.ReadKey(); } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  45. MethodInjectionA szolgáltatást nyújtó osztály publicinterfaceIService { voidServe(); } publicclassService : IService { publicvoidServe() { Console.WriteLine("Service Called"); //ToDo: SomeStuff } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  46. Az ügyfél osztály publicclassClient { privateIService _service; publicvoidStart(IService Service) { this._service=Service Console.WriteLine("Service Started"); this._service.Serve(); //ToDo: SomeStuff } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  47. Használat class Program { static void Main(string[] args) { Client client = new Client(); client.Start(new Service()); Console.ReadKey(); } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  48. TemplateMethod - Sablonfüggvény http://www.dofactory.com/Patterns/PatternTemplate.aspx#_self1 Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  49. Az absztrakt ős osztály abstractclassAbstractClass   { publicabstractvoid PrimitiveOperation1(); publicabstractvoid PrimitiveOperation2();     // The "Templatemethod" publicvoidTemplateMethod()     {       PrimitiveOperation1();       PrimitiveOperation2(); Console.WriteLine("");     } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

  50. Leszármazott - A classConcreteClassA : AbstractClass   { publicoverridevoid PrimitiveOperation1()     { Console.WriteLine("ConcreteClassA.PrimitiveOperation1()");     } publicoverridevoid PrimitiveOperation2()     { Console.WriteLine("ConcreteClassA.PrimitiveOperation2()");     }   } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014

More Related