580 likes | 675 Views
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ő.
E N D
Szoftvertechnológia 6. előadás Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014
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
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
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
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
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
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
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
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
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
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
Megoldás bővítő metódussal Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014
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
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
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
Interfész interfaceIVideoSource { stringGetTvGuide(); stringPlayVideo(); } Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014
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
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
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
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
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
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
Futás Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014
Composite - Összetétel Forrás: MathiasBartoll, NoriAhari, Oliver C. Moldez: Design Patternsin C# Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014
Az összetétel minta szerkezete Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014
Implemen-táció Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014
line osztálylevél Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014
Picture osztálycsomópont Picture osztály Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014
Observer - Megfigyelő Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014
Közzétevő osztály Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014
Megfigyelő (feliratkozó) Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014
Fel/leiratkozás Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014
Strategy - stratégia Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014
Megoldások/stratégiák Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014
Illesztő modul Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014
Használat Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014
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
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
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
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
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
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
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
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
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
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
TemplateMethod - Sablonfüggvény http://www.dofactory.com/Patterns/PatternTemplate.aspx#_self1 Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014
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
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