çç¥æ¨¡å¼éè¿å°è£
ä¸ç»ç¸å
³ç®æ³ï¼ä¸ºClientæä¾è¿è¡æ¶ççµæ´»æ§ãClientå¯ä»¥å¨è¿è¡æ¶ï¼éæ©ä»»ä¸ç®æ³ï¼èä¸æ¹å使ç¨ç®æ³çContextãä¸äºæµè¡ççç¥æ¨¡å¼çä¾åæ¯åé£äºä½¿ç¨ç®æ³ç代ç ï¼ä¾å¦å å¯ç®æ³ãå缩ç®æ³ãæåºç®æ³ãå¦ä¸æ¹é¢ï¼ç¶æ模å¼å
许对象ï¼å¨ä¸åçç¶ææ¥æä¸åçè¡ä¸ºãå 为ç°å®ä¸çä¸ç对象é常é½æ¯æç¶æçï¼æ以å¨ä¸åç¶æï¼è¡ä¸ºä¹ä¸ä¸æ ·ãä¾å¦ï¼VMï¼èªå¨å®è´§æºï¼åªå¨hasCoinç¶ææç»åååï¼ä¸æå¸ï¼æ¯ä¸ä¼åçãç°å¨å¯ä»¥æ¸
æ¥ççåºä¸åä¹å¤äºï¼æå¾æ¯ä¸åçãç¶æ模å¼å¸®å©å¯¹è±¡ç®¡çç¶æï¼èçç¥æ¨¡å¼å
许Clientéæ©ä¸åçè¡ä¸ºã
å¦ä¸ä¸ªä¸é£ä¹å®¹æè½çåºæ¥çåºå«æ¯ï¼æ¯è°ä¿ä½¿äºè¡ä¸ºçæ¹åãçç¥æ¨¡å¼ä¸ï¼æ¯Clientæä¾äºä¸åççç¥ç»Contextï¼ç¶æ模å¼ä¸ï¼ç¶æ转移ç±ContextæState管çãå¦å¤ï¼å¦æå¨Stateä¸ç®¡çç¶æ转移ï¼é£ä¹å¿ é¡»ææContextçå¼ç¨ãä¾å¦ï¼å¨VMçä¾åä¸ï¼State对象éè¦è°ç¨VMçsetState()æ¹æ³å»æ¹åçç¶æãå¦ä¸æ¹é¢ï¼Strategyä»ä¸ææContextçå¼ç¨ï¼æ¯Clientææéæ©çStrategyä¼ éç»Contextãç±äºç¶æ模å¼åçç¥æ¨¡å¼çåºå«ï¼æ¯æµè¡çJava设计ååç±»é¢è¯é¢ä¹ä¸ï¼å°ä¼å¨æ¬ææ¢è®¨å¨Javaä¸ï¼ç¶æ模å¼åçç¥æ¨¡å¼çå¼åï¼è¿å¯ä»¥å æ·±ç解ã
ççç¶æ模å¼åçç¥æ¨¡å¼çUMLå¾ï¼å°±ä¼åç°ç»æé常ç¸ä¼¼ã使ç¨State对象æ¹åèªå·±è¡ä¸ºç对象被称为Context对象ï¼ç¸ä¼¼çï¼ä½¿ç¨Strategy对象æ¹åèªå·±è¡ä¸ºç对象å«Context对象ãè®°ä½ï¼ClientåContextæ交éãå¨ç¶æ模å¼ä¸ï¼Contextææ¹æ³è°ç¨å§æç»å½åçç¶æ对象ï¼èå¨çç¥æ¨¡å¼ä¸ï¼Context使ç¨çStrategy对象ï¼æ¯è¢«å½ååæ°ä¼ éè¿æ¥çï¼æå¨Context对象被å建æ¶å°±è¢«æä¾çã
è¿æ¯ä¸ä¸ºç»å ¸çVMé®é¢è设计çç¶æ模å¼UMLç±»å¾ãå¯ä»¥çåºï¼VMçç¶ææ¯ä¸ªæ¥å£ï¼è¡¨ç¤ºä¸åç¶æçå ·ä½å®ç°ãæ¯ä¸ä¸ªç¶æé½ææContextçå¼ç¨ï¼ç¨æ¥ç®¡çç±Context触åçè¡ä¸ºå¯¼è´çç¶æ转移ã
è¿æ¯ä¸ä¸ºå®ç°æåºåè½è设计ççç¥æ¨¡å¼UMLç±»å¾ãå 为åå¨å¾å¤æåºç®æ³ï¼è¯¥æ¨¡å¼è®©Clientå¨æåºæ¶éæ©éå½çç®æ³ãäºå®ä¸ï¼Javaçéåæ¡æ¶å°±ä½¿ç¨è¿ä¸ªæ¨¡å¼ï¼å®ç°äºç¨æ¥æåºçCollections.sort()æ¹æ³ãä¸åçæ¯ï¼ä¸å 许Clientéæ©æåºç®æ³ï¼èæ¯è®©ä¼ éComparatoræComparableæ¥å£çå®ä¾æ¥æå®æ¯è¾çç¥ã
çç¥æ¨¡å¼å°è£ äºä¸ç»ç¸å ³ç®æ³ï¼å 许Clientå¨è¿è¡æ¶ä½¿ç¨å¯äºæ¢çè¡ä¸ºï¼ç¶æ模å¼å¸®å©ä¸ä¸ªç±»å¨ä¸åçç¶ææ¾ç¤ºä¸åçè¡ä¸ºã
ç¶æ模å¼å°è£ äºå¯¹è±¡çç¶æï¼èçç¥æ¨¡å¼å°è£ ç®æ³æçç¥ãå 为ç¶ææ¯è·å¯¹è±¡å¯åç¸å ³çï¼ä¸è½è¢«éç¨ï¼èéè¿ä»Contextä¸å离åºçç¥æç®æ³ï¼å¯ä»¥éç¨ã
å¨ç¶æ模å¼ä¸ï¼æ¯ä¸ªç¶æéè¿ææContextçå¼ç¨ï¼æ¥å®ç°ç¶æ转移ï¼ä½æ¯æ¯ä¸ªçç¥é½ä¸ææContextçå¼ç¨ï¼åªæ¯è¢«Context使ç¨ã
çç¥å®ç°å¯ä»¥ä½ä¸ºåæ°ä¼ éç»ä½¿ç¨ç对象ï¼ä¾å¦Collections.sort()ï¼åæ°å å«ä¸ä¸ªComparatorçç¥ãå¦ä¸æ¹é¢ï¼ç¶ææ¯Context对象èªå·±çä¸é¨åï¼éçæ¶é´çæ¨ç§»ï¼Context对象ä»ä¸ä¸ªç¶æ转移å°å¦ä¸ä¸ªç¶æã
è½ç¶é½ç¬¦åOCPååï¼çç¥æ¨¡å¼ä¹ç¬¦åSRPååï¼åä¸èè´£ååï¼ï¼å 为æ¯ä¸ªçç¥é½å°è£ èªå·±çç®æ³ï¼ä¸ä¸ä¾èµå ¶ä»çç¥ãä¸ä¸ªçç¥çæ¹åï¼å¹¶ä¸ä¼å¯¼è´å ¶ä»çç¥çååã
å¦ä¸ä¸ªç论ä¸çä¸åï¼çç¥æ¨¡å¼å®ä¹äºå¯¹è±¡âæä¹åâçé¨åãä¾å¦ï¼æåºå¯¹è±¡æä¹å¯¹æ°æ®æåºãç¶æ模å¼å®ä¹äºå¯¹è±¡âæ¯ä»ä¹âåâä»ä¹æ¶ååâçé¨åãä¾å¦ï¼å¯¹è±¡å¤äºä»ä¹ç¶æï¼ä»ä¹æ¶åå¤å¨æ个ç¹å®çç¶æã
ç¶æ模å¼ä¸å¾å¥½çå®ä¹äºç¶æ转移ç次åºï¼èçç¥æ¨¡å¼å¹¶æ æ¤éè¦ï¼Clientå¯ä»¥èªç±çéæ©ä»»ä½çç¥ã
ä¸äºå¸¸è§ççç¥æ¨¡å¼çä¾åæ¯å°è£ ç®æ³ï¼ä¾å¦æåºç®æ³ï¼å å¯ç®æ³æè å缩ç®æ³ãå¦æçå°ä»£ç éè¦ä½¿ç¨ä¸åç±»åçç¸å ³ç®æ³ï¼é£ä¹èè使ç¨çç¥æ¨¡å¼å§ãèè¯å«ä½æ¶ä½¿ç¨ç¶æ模å¼æ¯å¾ç®åçï¼å¦æéè¦ç®¡çç¶æåç¶æ转移ï¼ä½ä¸æ³ä½¿ç¨å¤§éåµå¥çæ¡ä»¶è¯å¥ï¼é£ä¹å°±æ¯äºã
æåä½æéè¦çä¸ä¸ªä¸åä¹å¤æ¯ï¼çç¥çæ¹åç±Clientå®æï¼èç¶æçæ¹åï¼ç±Contextæç¶æèªå·±ã
本文链接地址: Java中,状态模式和策略模式的区别
希望可以帮到你
祝你学习愉快
本回答被提问者和网友采纳