¡¶JAVAÓëģʽ¡·µÚ16Ìì¨D²ßÂÔģʽ (Ò»)

2014-11-24 08:27:00 ¡¤ ×÷Õß: ¡¤ ä¯ÀÀ: 3
²ßÂÔģʽÊôÓÚ¶ÔÏóµÄÐÐΪģʽ¡£ÆäÓÃÒâÊÇÕë¶ÔÒ»×éËã·¨£¬½«Ã¿Ò»¸öËã·¨·â×°µ½¾ßÓй²Í¬½Ó¿ÚµÄ¶ÀÁ¢µÄÀàÖУ¬´Ó¶øÊ¹µÃËüÃÇ¿ÉÒÔÏà»¥Ìæ»»¡£²ßÂÔģʽʹµÃËã·¨¿ÉÒÔÔÚ²»Ó°Ïìµ½¿Í»§¶ËµÄÇé¿öÏ·¢Éú±ä»¯¡£
________________________________________
²ßÂÔģʽµÄ½á¹¹
¡¡¡¡²ßÂÔģʽÊǶÔËã·¨µÄ°ü×°£¬ÊǰÑʹÓÃËã·¨µÄÔðÈκÍËã·¨±¾Éí·Ö¸î¿ªÀ´£¬Î¯Åɸø²»Í¬µÄ¶ÔÏó¹ÜÀí¡£²ßÂÔģʽͨ³£°ÑÒ»¸öϵÁеÄËã·¨°ü×°µ½Ò»ÏµÁеIJßÂÔÀàÀïÃæ£¬×÷Ϊһ¸ö³éÏó²ßÂÔÀàµÄ×ÓÀà¡£ÓÃÒ»¾ä»°À´Ëµ£¬¾ÍÊÇ£º¡°×¼±¸Ò»×éËã·¨£¬²¢½«Ã¿Ò»¸öËã·¨·â×°ÆðÀ´£¬Ê¹µÃËüÃÇ¿ÉÒÔ»¥»»¡±¡£ÏÂÃæ¾ÍÒÔÒ»¸öʾÒâÐÔµÄʵÏÖ½²½â²ßÂÔģʽʵÀýµÄ½á¹¹¡£

¡¡Õâ¸öÄ£Ê½Éæ¼°µ½Èý¸ö½ÇÉ«£º
¡¡¡¡¡ñ¡¡¡¡»·¾³(Context)½ÇÉ«£º³ÖÓÐÒ»¸öStrategyµÄÒýÓá£
¡¡¡¡¡ñ¡¡¡¡³éÏó²ßÂÔ(Strategy)½ÇÉ«£ºÕâÊÇÒ»¸ö³éÏó½ÇÉ«£¬Í¨³£ÓÉÒ»¸ö½Ó¿Ú»ò³éÏóÀàʵÏÖ¡£´Ë½ÇÉ«¸ø³öËùÓеľßÌå²ßÂÔÀàËùÐèµÄ½Ó¿Ú¡£
¡¡¡¡¡ñ¡¡¡¡¾ßÌå²ßÂÔ(ConcreteStrategy)½ÇÉ«£º°ü×°ÁËÏà¹ØµÄËã·¨»òÐÐΪ¡£
ʹÓó¡¾°
¡¡¡¡¼ÙÉèÏÖÔÚÒªÉè¼ÆÒ»¸ö··Âô¸÷ÀàÊé¼®µÄµç×ÓÉÌÎñÍøÕ¾µÄ¹ºÎﳵϵͳ¡£Ò»¸ö×î¼òµ¥µÄÇé¿ö¾ÍÊǰÑËùÓлõÆ·µÄµ¥¼Û³ËÉÏÊýÁ¿£¬µ«ÊÇʵ¼ÊÇé¿ö¿Ï¶¨±ÈÕâÒª¸´ÔÓ¡£±ÈÈ磬±¾ÍøÕ¾¿ÉÄܶÔËùÓеĸ߼¶»áÔ±Ìṩÿ±¾20%µÄ´ÙÏúÕÛ¿Û£»¶ÔÖм¶»áÔ±Ìṩÿ±¾10%µÄ´ÙÏúÕÛ¿Û£»¶Ô³õ¼¶»áԱûÓÐÕÛ¿Û¡£
¡¡¡¡¸ù¾ÝÃèÊö£¬ÕÛ¿ÛÊǸù¾ÝÒÔÏµļ¸¸öËã·¨ÖеÄÒ»¸ö½øÐеģº
¡¡¡¡Ëã·¨Ò»£º¶Ô³õ¼¶»áԱûÓÐÕÛ¿Û¡£
¡¡¡¡Ëã·¨¶þ£º¶ÔÖм¶»áÔ±Ìṩ10%µÄ´ÙÏúÕÛ¿Û¡£
¡¡¡¡Ëã·¨Èý£º¶Ô¸ß¼¶»áÔ±Ìṩ20%µÄ´ÙÏúÕÛ¿Û¡£
¡¡¡¡Ê¹ÓòßÂÔģʽÀ´ÊµÏֵĽṹͼÈçÏ£º


¡¡
Ô´´úÂë
¡¡¡¡³éÏóÕÛ¿ÛÀà
[java]
1. package com.bankht.Strategy;
2.
3. /**
4. * @author: ÌØÖÖ±ø¡ªAK47
5. * @´´½¨Ê±¼ä£º2012-6-26 ÏÂÎç10:16:58
6. *
7. * @Àà˵Ã÷ £º³éÏóÕÛ¿ÛÀà
8. */
9. public interface MemberStrategy {
10. /**
11. * ¼ÆËãͼÊéµÄ¼Û¸ñ
12. *
13. * @param booksPrice
14. * ͼÊéµÄÔ­¼Û
15. * @return ¼ÆËã³ö´òÕÛºóµÄ¼Û¸ñ
16. */
17. public double calcPrice(double booksPrice);
18. }

¡¡³õ¼¶»áÔ±ÕÛ¿ÛÀà
[java]
1. package com.bankht.Strategy;
2.
3. /**
4. * @author: ÌØÖÖ±ø¡ªAK47
5. * @´´½¨Ê±¼ä£º2012-6-26 ÏÂÎç10:17:28
6. *
7. * @Àà˵Ã÷ £º³õ¼¶»áÔ±ÕÛ¿ÛÀà
8. */
9. public class PrimaryMemberStrategy implements MemberStrategy {
10.
11. @Override
12. public double calcPrice(double booksPrice) {
13.
14. System.out.println("¶ÔÓÚ³õ¼¶»áÔ±µÄûÓÐÕÛ¿Û");
15. return booksPrice;
16. }
17.
18. }


¡¡¡¡Öм¶»áÔ±ÕÛ¿ÛÀà
[java]
1. package com.bankht.Strategy;
2.
3. /**
4. * @author: ÌØÖÖ±ø¡ªAK47
5. * @´´½¨Ê±¼ä£º2012-6-26 ÏÂÎç10:18:15
6. *
7. * @Àà˵Ã÷ £ºÖм¶»áÔ±ÕÛ¿ÛÀà
8. */
9. public class IntermediateMemberStrategy implements MemberStrategy {
10.
11. @Override
12. public double calcPrice(double booksPrice) {
13.
14. System.out.println("¶ÔÓÚÖм¶»áÔ±µÄÕÛ¿ÛΪ10%");
15. return booksPrice * 0.9;
16. }
17.
18. }


¡¡¡¡¸ß¼¶»áÔ±ÕÛ¿ÛÀà
[java]
1. package com.bankht.Strategy;
2.
3. /**
4. * @author: ÌØÖÖ±ø¡ªAK47
5. * @´´½¨Ê±¼ä£º2012-6-26 ÏÂÎç10:18:59
6. *
7. * @Àà˵Ã÷ £º¸ß¼¶»áÔ±ÕÛ¿ÛÀà
8. */
9. public class AdvancedMemberStrategy implements MemberStrategy {
10.
11. @Override
12. public double calcPrice(double booksPrice) {
13.
14. System.out.println("¶ÔÓڸ߼¶»áÔ±µÄÕÛ¿ÛΪ20%");
15. return booksPrice * 0.8;
16. }
17. }


¡¡¡¡¼Û¸ñÀà
[java]
1. package com.bankht.Strategy;
2.
3. /**
4. * @author: ÌØÖÖ±ø¡ªAK47
5. * @´´½¨Ê±¼ä£º2012-6-26 ÏÂÎç10:19:22
6. *
7. * @Àà˵Ã÷ £º¼Û¸ñÀà
8. */
9. public class Price {
10. // ³ÖÓÐÒ»¸ö¾ßÌåµÄ²ßÂÔ¶ÔÏó
11. private MemberStrategy strategy;
12.
13. /**
14. * ¹¹Ô캯Êý£¬´«ÈëÒ»¸ö¾ßÌåµÄ²ßÂÔ¶ÔÏó
15. *
16. * @param strategy
17. * ¾ßÌåµÄ²ßÂÔ¶ÔÏó
18. */
19. public Price(MemberStrategy strategy) {
20. this.strategy = strategy;
21. }
22.
23. /**
24. * ¼ÆËãͼÊéµÄ¼Û¸ñ
25. *
26. * @param booksPrice
27. * ͼÊéµÄÔ­¼Û
28. * @return ¼ÆËã³ö´òÕÛºóµÄ¼Û¸ñ
29. */
30. public double quote(double booksPrice) {
31. return this.strategy.calcPrice(booksPrice);
32. }
33. }


¡¡¡¡¿Í»§¶Ë
[java]
1. package com.bankht.Strategy;
2.
3. /**
4. * @author: ÌØÖÖ±ø¡ªAK47
5. * @´´½¨Ê±¼ä£º2012-6-26 ÏÂÎç10:19:48
6. *
7. * @Àà˵Ã÷ £º¿Í»§¶Ë
8. */
9. public class Client {
10.
11. public static void main(String[] args) {
12. // Ñ¡Ôñ²¢´´½¨ÐèҪʹÓõIJßÂÔ¶ÔÏó
13. Member