Підтримка
www.wikidata.uk-ua.nina.az
Strategiya angl Strategy shablon proyektuvannya nalezhit do klasu shabloniv povedinki Vidomij she pid inshoyu nazvoyu Policy Jogo sut polyagaye u tomu shob stvoriti dekilka shem povedinki dlya odnogo ob yektu ta vinesti v okremij klas Shablon Strategiya Strategy dozvolyaye minyati vibranij algoritm nezalezhno vid ob yektiv kliyentiv yaki jogo vikoristovuyut Osnovni harakteristikiZavdannya Za tipom kliyenta abo za tipom obroblyuvanih danih vibrati vidpovidnij algoritm yakij slid zastosuvati Yaksho vikoristovuyetsya pravilo yake ne piddayetsya zminam nemaye neobhidnosti zvertatisya do shablonu strategiya Struktura Motivi Programa povinna zabezpechuvati rizni varianti algoritmu abo povedinki Potribno zminyuvati povedinku kozhnogo ekzemplyara klasu Neobhidno zminyuvati povedinku ob yektiv na stadiyi vikonannya Vvedennya interfejsu dozvolyaye klasam kliyentam nichogo ne znati pro klasi sho realizuyut cej interfejs i inkapsulyuyut v sobi konkretni algoritmi Sposib virishennya Viddilennya proceduri viboru algoritmu vid jogo realizaciyi Ce dozvolyaye zrobiti vibir na pidstavi kontekstu Uchasniki Klas Strategy viznachaye yak budut vikoristovuvatisya rizni algoritmi Konkretni klasi ConcreteStrategy realizuyut ci rizni algoritmi Klas Context vikoristovuye konkretni klasi ConcreteStrategy za dopomogoyu posilannya na konkretnij tip abstraktnogo klasu Strategy Klasi Strategy i Context vzayemodiyut z metoyu realizaciyi obranogo algoritmu v deyakih vipadkah klasu Strategy potribno nadsilati zapiti klasu Context Klas Context peresilaye klasu Strategy zapit sho nadijshov vid jogo klasu kliyenta Naslidki Shablon Strategy viznachaye simejstvo algoritmiv Ce dozvolyaye vidmovitisya vid vikoristannya peremikachiv i abo umovnih operatoriv Viklik vsih algoritmiv povinen zdijsnyuvatisya standartnim chinom vsi voni povinni mati odnakovij interfejs Realizaciya Klas yakij vikoristovuye algoritm Context vklyuchaye abstraktnij klas Strategy sho volodiye abstraktnim metodom viznachalnim sposib vikliku algoritmu Kozhen pohidnij klas realizuye odin neobhidnij variant algoritmu Vikoristannya Arhitektura Microsoft WDF zasnovana na comu paterni U kozhnogo ob yekta drajver i pristrij ye nezminna chastina vshita v sistemu v yakij reyestruyetsya zminna chastina strategiya napisana v konkretnij realizaciyi Zminna chastina mozhe buti i zovsim porozhnoyu sho oznachaye sho drajver nichogo ne robit ale pri comu zdatnij brati uchast u PnP i upravlinni zhivlennyam Biblioteka ATL mistit u sobi nabir klasiv threading model yaki ye strategiyami riznimi realizaciyami Lock Unlock yaki potim vikoristovuyutsya osnovnimi klasami sistemi Pri comu v cih strategiyah vikoristovuyetsya statichnij polimorfizm cherez parametr shablonu a ne dinamichnij polimorfizm cherez virtualni metodi Priznachennya shablonu proyektuvannya Strategiya Isnuyut sistemi povedinka yakih viznachayetsya vidpovidno do pevnogo rodu algoritmiv Vsi voni podibni mizh soboyu priznacheni dlya virishennya spilnih zadach mayut odnakovij interfejs dlya koristuvannya ale vidriznyayutsya tilki povedinkoyu tobto realizaciyeyu Koristuvach nalashtuvavshi programu na potribnij algoritm otrimuye potribnij rezultat Priklad Ye programa interfejs cherez yaku obrahovuyetsya cina na tovar dlya pokupciv u yakih ye znizhka ta cina za sezonnoyu znizhkoyu obirayemo neobhidnij algoritm Ob yektno oriyentovanij dizajn takoyi programi buduyetsya na ideyi vikoristannya polimorfizmu Rezultatom ye nabir klasiv rodichiv u yakih yedinij interfejs ta rizna realizaciya algoritmiv Nedolikami takogo algoritmu ye te sho realizaciya zhorstko priv yazana do pidklasu sho uskladnyuye vnesennya zmin Virishennyam danoyi problemi ye vikoristannya paternu Strategiya Strategy Perevagi ta nedoliki Perevagi Mozhlivist pozbutisya umovnih operatoriv Kliyent mozhe vibirati najbilsh vluchnu strategiyu zalezhno vid vimog shodo shvidkodiyi i pam yati Nedoliki Zbilshennya kilkosti ob yektiv Kliyent maye znati osoblivosti realizacij strategij dlya viboru najbilsh vdaloyi Zv yazok z inshimi paternami Strategiya zminyuye realizaciyu dekorator dopovnyuye V strategiyi koristuvach znaye pro klasi strategij i minyaye yih samostijno v stani riznomanitni stani prihovani vid koristuvacha a za yih zaminu vidpovidaye sam klas Mist ce strukturnij patern Jogo komponenti zazvichaj vstanovlyuyutsya raz i ne zminyuyutsya pid chas vikonannya programi Vikoristovuyut dlya rozdilennya abstrakciyi ta realizaciyi Strategiya ce shablon povedinki Vikoristovuyut koli koli algoritmi mozhut zaminyuvati odin odnogo pid chas vikonannya programi Shablonnij metod zadaye kroki algoritmu yaki realizovuyut pidklasi Strategiya zadaye algoritm yakij mozhna vikonati dekilkoma sposobami do togo zh vibrati ci sposobi na etapi vikonannya programiPrikladiPriklad na Java Priklad realizaciyi Klas realizuye konkretnu strategiyu povinen uspadkovuvati cej interfejs Klas kontekstu vikoristovuye cej interfejs dlya vikliku konkretnoyi strategiyi interface Strategy int execute int a int b Realizuyemo algoritm z vikoristannyam interfejsu strategiyi class ConcreteStrategyAdd implements Strategy public int execute int a int b System out println Called ConcreteStrategyAdd s execute return a b Do an addition with a and b class ConcreteStrategySubtract implements Strategy public int execute int a int b System out println Called ConcreteStrategySubtract s execute return a b Do a subtraction with a and b class ConcreteStrategyMultiply implements Strategy public int execute int a int b System out println Called ConcreteStrategyMultiply s execute return a b Do a multiplication with a and b Klas kontekstu vikoristovuye interfejs strategiyi class Context private Strategy strategy Constructor public Context Strategy strategy this strategy strategy public int executeStrategy int a int b return strategy execute a b Testovij dodatok class StrategyExample public static void main String args Context context context new Context new ConcreteStrategyAdd int resultA context executeStrategy 3 4 context new Context new ConcreteStrategySubtract int resultB context executeStrategy 3 4 context new Context new ConcreteStrategyMultiply int resultC context executeStrategy 3 4 Priklad na C Priklad realizaciyi include lt iostream gt using namespace std zagalnij sposib virishennya problemi struct NameStrategy virtual void greet 0 Konkretni recepti virishennya struct SayHi public NameStrategy void greet cout lt lt Hi How is it going lt lt endl struct Ignore public NameStrategy void greet cout lt lt Pretend I do not see you lt lt endl struct Admission public NameStrategy void greet cout lt lt I am sorry I forgot your name lt lt endl Kontekst keruye strategiyeyu Poserednik Stan yaksho mozhliva zmina strategiyi za zhittya kontekstu class Context private NameStrategy amp strategy public Context NameStrategy amp strat strategy strat void greet strategy greet postijnij kod void main SayHi sayhi Ignore ignore Admission admission Context c1 sayhi c2 ignore c3 admission c1 greet c2 greet c3 greet Priklad realizaciyi class Strategy protected Strategy void public virtual Strategy void virtual void use void 0 class Strategy 1 public Strategy public Strategy 1 Strategy 1 void use void cout lt lt Strategy 1 lt lt endl class Strategy 2 public Strategy public Strategy 2 Strategy 2 void use void cout lt lt Strategy 2 lt lt endl class Strategy 3 public Strategy public Strategy 3 Strategy 3 void use void cout lt lt Strategy 3 lt lt endl class Context protected Strategy operation public Context void Context void virtual void UseStrategy void 0 virtual void SetStrategy Strategy v 0 class Client public Context public Client void Client void void UseStrategy void operation gt use void SetStrategy Strategy o operation o int tmain int argc TCHAR argv Client customClient Strategy 1 str1 Strategy 2 str2 Strategy 3 str3 customClient SetStrategy amp str1 customClient UseStrategy customClient SetStrategy amp str2 customClient UseStrategy customClient SetStrategy amp str3 customClient UseStrategy return 0 Priklad na C Priklad realizaciyi using System namespace DesignPatterns Behavioral Strategy lt summary gt Interfejs Strategiya viznachaye funkcionalnist v danomu prikladi ce metod lt see Cref Algorithm gt Algorithm lt see gt yaka povinna buti realizovana konkretnimi klasami strategij Inshimi slovami metod interfejsu viznachaye virishennya yakoyis zadachi a jogo realizaciyi v konkretnih klasah strategij viznachayut yakim shlyahom cya zadacha bude virishena lt Summary gt public interface IStrategy void Algorithm lt summary gt Persha konkretna realizaciya strategiya lt summary gt public class ConcreteStrategy1 IStrategy public void Algorithm Console WriteLine Vikonuyetsya algoritm strategiyi 1 lt summary gt Druga konkretna realizaciya strategiya Realizacij mozhe buti skilki zavgodno bagato lt Summary gt public class ConcreteStrategy2 IStrategy public void Algorithm Console WriteLine Vikonuyetsya algoritm strategiyi 2 lt summary gt Kontekst vikoristovuye strategiyu dlya virishennya svogo zavdannya lt summary gt public class Context lt summary gt Posilannya na interfejs lt see cref IStrategy gt IStrategy lt see gt dozvolyaye avtomatichno peremikatisya mizh konkretnimi realizaciyami inshimi slovami ce vibir konkretnoyi strategiyi lt summary gt private IStrategy strategy lt summary gt Konstruktor kontekstu Inicializuye ob yekt strategiyeyu lt summary gt lt param name strategy gt Strategiya lt param gt public Context IStrategy strategy strategy strategy lt summary gt Metod dlya ustanovki strategiyi Sluzhit dlya zmini strategiyi pid chas vikonannya V C mozhe buti realizovanij tak samo yak vlastivist zapisu lt summary gt lt param name strategy gt Nova strategiya lt param gt public void SetStrategy IStrategy strategy strategy strategy lt summary gt Deyaka funkcionalnist kontekstu yaka vibiraye strategiyu i vikoristovuye yiyi dlya virishennya svogo zavdannya lt summary gt public void ExecuteOperation strategy Algorithm lt summary gt Klas dodatka U danomu prikladi vistupaye yak kliyent kontekstu lt summary gt public static class Program lt summary gt Tochka vhodu v programu lt summary gt public static void Main Stvoryuyemo kontekst i inicializuvali jogo pershoyi strategiyeyu Context context new Context new ConcreteStrategy1 Vikonuyemo operaciyu kontekstu yaka vikoristovuye pershu strategiyu context ExecuteOperation Zaminyuyemo v konteksti pershu strategiyu drugoyu context SetStrategy new ConcreteStrategy2 Vikonuyemo operaciyu kontekstu yaka teper vikoristovuye drugu strategiyu context ExecuteOperation Prikladi na D Priklad realizaciyi import std stdio interface IStrategy int Action int a int b class TAddition IStrategy public int Action int a int b return a b class TSubtraction IStrategy public int Action int a int b return a b class TContexet private int a b IStrategy strategy public void SetAB int a int b TContexet a a TContexet b b void SetStrategy IStrategy strategy TContexet strategy strategy int Action return strategy Action a b void main TContexet context new TContexet context SetAB 10 5 context SetStrategy new TAddition writeln context Action 15 context SetStrategy new TSubtraction writeln context Action 5 Priklad na Delphi Priklad realizaciyi program Strategy pattern APPTYPE CONSOLE type IStrategy interface 6105F24C E5B2 47E5 BE03 835A894DEB42 procedure Algorithm end TConcreteStrategy1 class TInterfacedObject IStrategy public procedure Algorithm end procedure TConcreteStrategy1 Algorithm begin Writeln TConcreteStrategy1 Algorithm end type TConcreteStrategy2 class TInterfacedObject IStrategy public procedure Algorithm end procedure TConcreteStrategy2 Algorithm begin Writeln TConcreteStrategy2 Algorithm end type TContext class private FStrategy IStrategy public procedure ContextMethod property Strategy IStrategy read FStrategy write FStrategy end procedure TContext ContextMethod begin FStrategy Algorithm end var Context TContext begin Context TContext Create try Context Strategy TConcreteStrategy1 Create Context ContextMethod Context Strategy TConcreteStrategy2 Create Context ContextMethod finally Context Free end end Prikladi na Javascript Priklad realizaciyi interfejs Strategy class Strategy exec realizaciyi Strategy pokaz povidomlennya v statusnomu ryadku veboglyadacha pidtrimuyetsya ne vsima veboglyadachami class StrategyWindowStatus extends Strategy constructor super exec message window status message class StrategyNewWindow extends Strategy constructor super exec message const win window open blank win document write lt html gt message lt html gt pokaz povidomlennya za dopomogoyu modalnogo vikna class StrategyAlert extends Strategy constructor super exec message alert message Context class Context constructor strategy this strategy undefined exec message this strategy exec message Vikoristannya const showInWindowStatus new Context new StrategyWindowStatus const showInNewWindow new Context new StrategyNewWindow const showInAlert new Context new StrategyAlert showInWindowStatus exec povidomlennya showInNewWindow exec povidomlennya showInAlert exec povidomlennya Priklad z vikoristannyam dinamichnih first class funkcij Priklad realizaciyi function Context fn this exec function fn apply this arguments var showInWindowStatus new Context function message window status message var showInNewWindow new Context function message var win window open blank win document write lt html gt message lt html gt var showInAlert new Context function message alert message showInWindowStatus exec povidomlennya showInNewWindow exec povidomlennya showInAlert exec povidomlennya Prikladi na PHP5 Priklad realizaciyi lt php interface NamingStrategy function createName filename class ZipFileNamingStrategy implements NamingStrategy function createName filename return http downloads foo bar filename zip class TarGzFileNamingStrategy implements NamingStrategy function createName filename return http downloads foo bar filename tar gz class Context private namingStrategy function construct NamingStrategy strategy this gt namingStrategy strategy function execute url this gt namingStrategy gt createName Calc101 url this gt namingStrategy gt createName Stat2000 return url if strstr SERVER HTTP USER AGENT Win context new Context new ZipFileNamingStrategy else context new Context new TarGzFileNamingStrategy context gt execute gt Priklad na Python Priklad realizaciyi class People object tool None def init self name self name name def setTool self tool self tool tool def write self text self tool write self name text class ToolBase Simejstvo algoritmiv Instrument napisannya def write self name text raise NotImplementedError class PenTool ToolBase Ruchka def write self name text print u s ruchkoyu s name text class BrushTool ToolBase Penzel def write self name text print u s penzlem s name text class Student People Student tool PenTool class Painter People Hudozhnik tool BrushTool alexandr Student u Oleksandr alexandr write u Pishu lekciyu pro shablon Strategiya Oleksandr ruchkoyu Pishu lekciyu pro shablon Strategiya solomia Painter u Solomiya solomia write u Malyuyu ilyustraciyu do shablonu Strategiya Solomiya penzlem Malyuyu ilyustraciyu do shablonu Strategiya Solomiya virishila stati studentom solomia setTool PenTool solomia write u Ni vzhe krashe ya napishu konspekt Solomiya ruchkoyu Ni vzhe krashe ya napishu konspektVisnovkiOstannim chasom rozrobleno bagato mov programuvannya ale v kozhnij z nih dlya dosyagnennya najkrashogo rezultatu roboti neobhidno vikoristovuvati shabloni programuvannya odnim z yakih ye Strategiya Strategy DzherelaDesign Patterns Elements of Reusable Object Oriented Software 9 listopada 2012 u Wayback Machine LiteraturaBishop Judith C 3 0 Design Patterns Sebastopol California O Reilly 2008 Tomas Petricek Jon Skeet Functional Programming for the Real World b m Manning Publications 2010 Posilannyahttp code tutsplus com uk tutorials design patterns the strategy pattern cms 22796 5 bereznya 2016 u Wayback Machine
Топ