±à¼ÍƼö: |
±¾ÎÄ·ÖÏí×÷Õß¶Ô¹¤³§Ä£Ê½¡¢µ¥Àýģʽ¡¢×°ÊÎģʽ¡¢²ßÂÔģʽ¡¢ ´úÀíģʽºÍ¹Û²ìÕßģʽµÄÀí½â£¬½éÉÜÿÖÖģʽµÄÄ£ ʽ½á¹¹¡¢ÓÅȱµã¡¢ÊÊÓó¡¾°¡¢×¢ÒâʵÏÖ¼°´úÂëʵÏÖ¡£
£¬Ï£Íû¶Ô´ó¼ÒµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚ51CTO£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼¡¢ÍƼö¡£ |
|
Ò» ǰÑÔ
×î½üÔÚ¸ÄÔìһЩÀúÊ·µÄ´úÂ룬·¢ÏÖÒ»¸öºÜÃ÷ÏÔµÄÌØµã£¬´ó²¿·Ö´úÂëÊǼÇÐðÎÄ£¬°´ÕÕʼþµÄ·¢Õ¹¹ý³Ì½«¹ÊÊÂÆ½ÆÌÖ±ÐðµÄ½²½â³öÀ´¡£
ÕâÖÖ·½Ê½µÄºÃ´¦ÊDZȽϷûºÏÈËÀàµÄ˼άϰ¹ß£¬Ò»ÌõÖ÷Ïß½²µ½µ×£¬´úÂëÔĶÁÆðÀ´Ã»ÓÐÌ«´óÄѶȣ¬Ö»ÒªË³×ÅÌÙ¾ÍÄÜÃþµ½¹Ï£¬µ«ÊÇȱµãÒ²ºÜÃ÷ÏÔ£¬Ò»µ©¹ÊÊÂÏßÖÐÐèÒª²åÈëһЩеÄÔªËØ£¬±ÈÈ磺¼ÓÈëÒ»¸öеÄÈËÎï½ÇÉ«¡¢ÐµÄʱ¼äÏߣ¬¶¼»áÐèÒª´óÁ¿¸ü¸Ä¹ÊÊÂÏßÒÔÅäºÏÕâ¸öÐÂÔªËØµÄÈÚÈ룬ÉõÖÁ¶ÔÔÓÐÎÄÕÂÔì³ÉÆÆ»µÐÔµÄÓ°Ïì¡£
ΪÁ˽â¾öÕâ¸öÎÊÌ⣬ÈËÃÇ×ܽá³öÁ˺ܶàÖÖÎÄÕ½ṹ£¬ÀýÈ磺×Ü-·Ö½á¹¹£¬²¢Áнṹ£¬×Ü-·Ö-×ܽṹµÈµÈ£¬ÓÐÁËÕâЩ½á¹¹£¬ÔÚ¼ÓÈëÐÂÔªËØµÄʱºò£¬ÉõÖÁ²»±Ø¿¼ÂÇÐÂÔªËØÓëÔ¹ÊÊÂÇé½ÚµÄ¹ØÁªÐÔ£¬Ö±½Óµ¥ÀÒ»¸ö·ÖÖ§¹ÊÊÂÏß¶ÀÁ¢È¥½²¾ÍºÃÁË£¬Ö»ÒªÄܹ»ÔÚÕûÌå¹ÊʽáÊøÇ°£¬Óë»ã¾Ûµ½Ö÷Ïß¹ÊʾͿÉÒÔÁË£¨ÊDz»ÊǺÜÏñgit£¿£©¡£
ÔÚÈí¼þ¿ª·¢ÁìÓò£¬Ò²ÓкܶàÕâÑùµÄ·Ç³£ÓÐÓõÄʵ¼ù×ܽᣬÎÒÃdzÆÖ®ÎªÉè¼ÆÄ£Ê½¡£¶ÔÓÚÉè¼ÆÄ£Ê½£¬´ó¼Ò¶¼²»Ä°Éú£¬Ëæ±ãÕÒ¸öÈË£¬¹À¼Æ¶¼Äܽ²³öN¸öÉè¼ÆÄ£Ê½À´£¬µ«ÊdzýÁËÕâЩÉè¼ÆÄ£Ê½µÄ¸ÅÄºÜ¶àÈ˲»ÖªµÀÈçºÎÁé»îÔËÓÃÕâЩÉè¼ÆÄ£Ê½¡£ËùÒÔ½èÕâÆªÎÄÕºʹó¼Ò ¹²Í¬Ñ§Ï°Éè¼ÆÄ£Ê½µÄ˼Ïë¡£
¶þ Àí½âÉè¼ÆÄ£Ê½
ÎÒ¾¡Á¿ÓÃ×îͨË×Ò×¶®µÄʾÀýºÍÓïÑÔÀ´½²ÊöÎÒÀí½âµÄÉè¼ÆÄ£Ê½£¬Ï£ÍûÄܶԴó¼ÒÓÐËù°ïÖú¡£
ÁíÍâÒ²ÎÞÐ辫ͨËùÓеÄÉè¼ÆÄ£Ê½£¬Ö»ÒªÄܹ»ÈÚ»ã¹áͨ³£¼ûµÄÉè¼ÆÄ£Ê½£¬¾ÍÄÜÈÃÄãµÄ´úÂë±äµÃÓÅÑÅ¡£¾ÍÏñ³ÌÒ§½ðÖ»»áÈý°å¸«£¬µ«ÊÇÊìÁ·¶ÈÎÞÈËÄܼ°£¬ÕÕÑùÄܺáÐÐÌìÏ¡£
1 ¹¤³§Ä£Ê½(Factory)
¼òµ¥¹¤³§(Simple Factory)
СÃ÷×·ÃÃ×ÓµÄʱºò£¬ÇëËýºÈÁ˲»ÉÙ¿§·È£¬Ëý°®ºÈ¿¨²¼ÆæÅµ£¬Ã¿´ÎÈ¥¿§·Èµê£¬Ö»Òª¸ú·þÎñԱ˵¡°À´±¿¨²¼ÆæÅµ¡±¾ÍÐÐÁË£¬ËäÈ»¸÷¼ÒµÄ¿ÚζÓÐЩ²»Í¬£¬µ«ÊDz»¹ÜÊÇÐǰְֻ¹ÊÇCosta£¬¶¼Äܹ»Ìṩ¿¨²¼ÆæÅµÕâÖÖ¿§·È¡£ÕâÀïµÄÐǰְֺÍCosta¾ÍÊÇÉú²ú¿§·ÈµÄ¹¤³§¡£
£¨1£©¼òµ¥¹¤³§Ä£Ê½½á¹¹
¼òµ¥¹¤³§Ä£Ê½°üº¬ÈçϽÇÉ«£º
- Factory£º¹¤³§½ÇÉ«-¸ºÔðʵÏÖ´´½¨ËùÓÐʵÀýµÄÄÚ²¿Âß¼.
- Product£º³éÏó²úÆ·½ÇÉ«-ÊÇËù´´½¨µÄËùÓжÔÏóµÄ¸¸À࣬¸ºÔðÃèÊöËùÓÐʵÀýËù¹²ÓеĹ«¹²½Ó¿Ú¡£
- ConcreteProduct£º¾ßÌå²úÆ·½ÇÉ«-ÊÇ´´½¨Ä¿±ê£¬ËùÓд´½¨µÄ¶ÔÏ󶼳䵱Õâ¸ö½ÇÉ«µÄij¸ö¾ßÌåÀàµÄʵÀý¡£
½á¹¹Í¼£º

ʱÐòͼ£º

£¨2£©ÓÅȱµã
- Óŵ㣺¿Í»§ÀàºÍ¹¤³§Àà·Ö¿ª¡£Ïû·ÑÕßÈκÎʱºòÐèҪijÖÖ²úÆ·£¬Ö»ÐèÏò¹¤³§ÇëÇó¼´¿É¡£Ïû·ÑÕßÎÞÐëÐ޸ľͿÉÒÔ½ÓÄÉвúÆ·¡£
- ȱµã £º Êǵ±²úÆ·ÐÞ¸Äʱ£¬¹¤³§ÀàÒ²Òª×öÏàÓ¦µÄÐ޸ġ£
¹¤³§·½·¨(Factory Method)
ÒÔǰ¾³£´øÀÏÆÅÈ¥ÓÅÒ¿⣨¼òµ¥¹¤³§£©ÂòÒ·þ£¬¾ÍÄÇô¶à¿îʽ£¬¹äµÄ´ÎÊý¶àÁË£¬Ëý¾Í·³ÁË¡£ºóÀ´ÎҸıä²ßÂÔ£¬´øÀÏÆÅÈ¥¹äÉ̳¡£¨³éÏ󹤳§£©£¬É̳¡ÀïÓи÷Ê½Æ·ÅÆµÄµêÆÌ£¬²»ÓÃÎҹܣ¬Ëý×Ô¼º¾ÍÄܹäÉÏÒ»ÕûÌì¡£
Çø±ðÓÚ¼òµ¥¹¤³§£¬ºËÐŤ³§ÀࣨÉ̳¡£©²»ÔÙ¸ºÔðËùÓвúÆ·µÄ´´½¨£¬¶øÊǽ«¾ßÌå´´½¨µÄ¹¤×÷½»¸ø×ÓÀࣨ·þ×°µê£©È¥×ö£¬³ÉΪһ¸ö³éÏ󹤳§½ÇÉ«£¬½ö¸ºÔð¸ø³ö¾ßÌ幤³§Àà±ØÐëʵÏֵĽӿڣ¨Ãŵ꣩£¬¶ø²»½Ó´¥ÄÄÒ»¸ö²úÆ·ÀàÓ¦µ±±»ÊµÀý»¯ÕâÖÖϸ½Ú¡£
£¨1£©¹¤³§·½·¨Ä£Ê½½á¹¹
¹¤³§·½·¨Ä£Ê½°üº¬ÈçϽÇÉ«£º
- Product£º³éÏó²úÆ·
- ConcreteProduct£º¾ßÌå²úÆ·
- Factory£º³éÏ󹤳§
- ConcreteFactory£º¾ßÌ幤³§
½á¹¹Í¼£º

ʱÐòͼ£º

¹¤³§Ä£Ê½×ܽá
£¨1£©ÊÊÓó¡¾°
Êä³öµÄ²úÆ·ÊDZê׼Ʒ£¬ËÀ´×ö¶¼¿ÉÒÔ¡£
£¨2£©¾ÙÀý
³£¼ûµÄÊý¾Ý¿âÁ¬½Ó¹¤³§£¬SqlSessionFactory£¬²úÆ·ÊÇÒ»¸öÊý¾Ý¿âÁ¬½Ó£¬ÖÁÓÚÊÇoracleÌṩµÄ£¬»¹ÊÇmysqlÌṩµÄ£¬ÎÒ²¢²»ÐèÒª¹ØÐÄ£¬ÒòΪ¶¼ÄÜÈÃÎÒͨ¹ýsqlÀ´²Ù×÷Êý¾Ý¡£
£¨3£©×¢ÒâÊÂÏî
ÏîÄ¿³õÆÚ£¬Èí¼þ½á¹¹ºÍÐèÇó¶¼Ã»ÓÐÎȶ¨ÏÂÀ´Ê±£¬²»½¨ÒéʹÓôËģʽ£¬ÒòΪÆäÁÓÊÆÒ²ºÜÃ÷ÏÔ£¬Ôö¼ÓÁË´úÂëµÄ¸´ÔÓ¶È£¬Ôö¼ÓÁ˵÷Óòã´Î£¬Ôö¼ÓÁËÄڴ渺µ£¡£ËùÒÔҪעÒâ·ÀֹģʽµÄÀÄÓá£
£¨4£©¼òµ¥ÊµÏÖ
- package FactoryMethod;
- public class FactoryPattern
- {
- public static void main(String[] args)
- {
- Factory factory = new ConcreteFactoryA();
- Product product = factory.createProduct();
- product.use();
- }
- }
- //³éÏó²úÆ·£ºÌṩÁ˲úÆ·µÄ½Ó¿Ú
- interface Product
- {
- public void use();
- }
- //¾ßÌå²úÆ·A£ºÊµÏÖ³éÏó²úÆ·ÖеijéÏó·½·¨
- class ConcreteProductA implements Product
- {
- public void use()
- {
- System. out .println( "¾ßÌå²úÆ·AÏÔʾ..." );
- }
- }
- //¾ßÌå²úÆ·B£ºÊµÏÖ³éÏó²úÆ·ÖеijéÏó·½·¨
- class ConcreteProductB implements Product
- {
- public void use()
- {
- System. out .println( "¾ßÌå²úÆ·BÏÔʾ..." );
- }
- }
- //³éÏ󹤳§£ºÌṩÁ˳§Æ·µÄÉú³É·½·¨
- interface Factory
- {
- public Product createProduct();
- }
- //¾ßÌ幤³§A£ºÊµÏÖÁ˳§Æ·µÄÉú³É·½·¨
- class ConcreteFactoryA implements AbstractFactory
- {
- public Product createProduct()
- {
- System. out .println( "¾ßÌ幤³§AÉú³É-->¾ßÌå²úÆ·A." );
- return new ConcreteProductA();
- }
- }
- //¾ßÌ幤³§B£ºÊµÏÖÁ˳§Æ·µÄÉú³É·½·¨
- class ConcreteFactoryB implements AbstractFactory
- {
- public Product createProduct()
- {
- System. out .println( "¾ßÌ幤³§BÉú³É-->¾ßÌå²úÆ·B." );
- return new ConcreteProductB();
- }
- }
|
2 µ¥Àýģʽ(Singleton)
ΤС±¦ÓÐ7¸öÀÏÆÅ£¬µ«ÊÇÿ¸ö¶¼Ö»ÓÐËûÕâÒ»¸öÀϹ«£¬ËûµÄËùÓÐÀÏÆÅ½ÐÀϹ«Ê±£¬Ö¸µÄ¶¼ÊÇËû£¬Ëû¾ÍÊÇÒ»¸öµ¥Àý¡£
µ¥Àýģʽ½á¹¹
µ¥Àýģʽ°üº¬ÈçϽÇÉ«£º
½á¹¹Í¼£º

ʱÐòͼ£º

ÓÅȱµã
- Óŵ㣺ȫ¾ÖÖ»ÓÐÒ»¸öʵÀý£¬±ãÓÚͳһ¿ØÖÆ£¬Í¬Ê±¼õÉÙÁËϵͳ×ÊÔ´¿ªÏú¡£
- ȱµã£ºÃ»ÓгéÏó²ã£¬À©Õ¹À§ÄÑ¡£
Ó¦Óó¡¾°
ÊʺÏÐèÒª×öÈ«¾Öͳһ¿ØÖƵij¡¾°£¬ÀýÈ磺ȫ¾ÖΨһµÄ±àÂëÉú³ÉÆ÷¡£
×¢ÒâÊÂÏî
Ö»¶ÔÍâÌṩ¹«¹²µÄgetInstance·½·¨£¬²»ÌṩÈκι«¹²¹¹Ô캯Êý¡£
¼òµ¥ÊµÏÖ
- public class Singleton
- {
- private static volatile Singleton instance= null ; //±£Ö¤ instance ÔÚËùÓÐÏß³ÌÖÐͬ²½
- private Singleton(){} //private ±ÜÃâÀàÔÚÍⲿ±»ÊµÀý»¯
- public static synchronized Singleton getInstance()
- {
- //getInstance ·½·¨Ç°¼Óͬ²½
- if(instance == null )
- {
- instance = new Singleton();
- }
- return instance;
- }
- }
|
3 ×°ÊÎģʽ(Decorator)
´óѧ±ÏÒµ£¬ÏëÒªË͸øÊÒÓÑÒ»¸öÓмÍÄîÒâÒåµÄÀñÎ¾ÍÕÒµ½Ò»ÕÅ´ó¼ÒµÄºÏÕÕ£¬ÔÚÉÏÃæÐ´ÉÏ¡°ÓÀÔ¶µÄÐֵܣ¡¡±£¬È»ºóÄÃÈ¥ÀñÆ·µê×°Á˸öÏà¿ò£¬ÔÙ°üÉÏÀñºÐ¡£ÕâÀïµÄÎÒºÍÀñÆ·µê¶¼ÊÇ×°ÊÎÆ÷£¬¶¼Ã»ÓиıäÕÕÆ¬±¾Éí£¬È´¶¼ÈÃÕÕÆ¬±äµÃ¸üÊʺÏ×÷ΪÀñÎïËÍÈË¡£
×°ÊÎģʽ½á¹¹
×°ÊÎģʽ°üº¬ÈçϽÇÉ«£º
- Component£º³éÏó¹¹¼þ
- ConcreteComponent £º ¾ßÌå¹¹¼þ
- Decorator £º ³éÏó×°ÊÎÀà
- ConcreteDecorator £º ¾ßÌå×°ÊÎÀà
½á¹¹Í¼£º

ʱÐòͼ£º

ÓÅȱµã
- Óŵ㣺±È¼Ì³Ð¸ü¼ÓÁé»î£¨¼Ì³ÐÊÇñîºÏ¶ÈºÜ´óµÄ¾²Ì¬¹ØÏµ£©£¬¿ÉÒÔ¶¯Ì¬µÄΪ¶ÔÏóÔö¼ÓÖ°Ô𣬿ÉÒÔͨ¹ýʹÓò»Í¬µÄ×°ÊÎÆ÷×éºÏΪ¶ÔÏóÀ©Õ¹N¸öй¦ÄÜ£¬¶ø²»»áÓ°Ïìµ½¶ÔÏó±¾Éí¡£
- ȱµã£ºµ±Ò»¸ö¶ÔÏóµÄ×°ÊÎÆ÷¹ý¶àʱ£¬»á²úÉúºÜ¶àµÄ×°ÊÎÀàС¶ÔÏóºÍ×°ÊÎ×éºÏ²ßÂÔ£¬Ôö¼Óϵͳ¸´ÔÓ¶È£¬Ôö¼Ó´úÂëµÄÔĶÁÀí½â³É±¾¡£
ÊÊÓó¡¾°
- ÊʺÏÐèÒª£¨Í¨¹ýÅäÖã¬È磺diamond£©À´¶¯Ì¬Ôö¼õ¶ÔÏó¹¦Äܵij¡¾°¡£
- ÊʺÏÒ»¸ö¶ÔÏóÐèÒªNÖÖ¹¦ÄÜÅÅÁÐ×éºÏµÄ³¡¾°£¨Èç¹ûÓü̳У¬»áʹ×ÓÀàÊýÁ¿±¬Õ¨Ê½Ôö³¤£©
×¢ÒâÊÂÏî
- Ò»¸ö×°ÊÎÀàµÄ½Ó¿Ú±ØÐëÓë±»×°ÊÎÀàµÄ½Ó¿Ú±£³ÖÏàͬ£¬¶ÔÓÚ¿Í»§¶ËÀ´ËµÎÞÂÛÊÇ×°ÊÎ֮ǰµÄ¶ÔÏó»¹ÊÇ×°ÊÎÖ®ºóµÄ¶ÔÏ󶼿ÉÒÔÒ»Ö¶Դý¡£
- ¾¡Á¿±£³Ö¾ßÌå¹¹¼þÀàComponent×÷Ϊһ¸ö¡°ÇᡱÀ࣬Ҳ¾ÍÊÇ˵²»Òª°ÑÌ«¶àµÄÂß¼ºÍ״̬·ÅÔÚ¾ßÌå¹¹¼þÀàÖУ¬¿ÉÒÔͨ¹ý×°ÊÎÀà¡£
¼òµ¥ÊµÏÖ
- package decorator;
- public class DecoratorPattern
- {
- public static void main(String[] args)
- {
- Component component = new ConcreteComponent();
- component.operation();
- System. out .println( "---------------------------------" );
- Component decorator = new ConcreteDecorator(component);
- decorator.operation();
- }
- }
- //³éÏó¹¹¼þ½ÇÉ«
- interface Component
- {
- public void operation();
- }
- //¾ßÌå¹¹¼þ½ÇÉ«
- class ConcreteComponent implements Component
- {
- public ConcreteComponent()
- {
- System. out .println( "´´½¨¾ßÌå¹¹¼þ½ÇÉ«" );
- }
- public void operation()
- {
- System. out .println( "µ÷ÓþßÌå¹¹¼þ½ÇÉ«µÄ·½·¨operation()" );
- }
- }
- //³éÏó×°ÊνÇÉ«
- class Decorator implements Component
- {
- private Component component;
- public Decorator(Component component)
- {
- this.component=component;
- }
- public void operation()
- {
- component.operation();
- }
- }
- //¾ßÌå×°ÊνÇÉ«
- class ConcreteDecorator extends Decorator
- {
- public ConcreteDecorator(Component component)
- {
- super(component);
- }
- public void operation()
- {
- super.operation();
- addBehavior();
- }
- public void addBehavior()
- {
- System. out .println( "Ϊ¾ßÌå¹¹¼þ½ÇÉ«Ôö¼Ó¶îÍâµÄ¹¦ÄÜaddBehavior()" );
- }
- }
|
4 ²ßÂÔģʽ(Strategy)
ÄÐÉú×·ÃÃ×Óʱ£¬Ò»°ã¶¼»áÓõ½ÕâÖÖģʽ£¬³£¼ûµÄ²ßÂÔÓÐÕâЩ£ºÔ¼»á³Ô·¹£»¿´µçÓ°£»¿´Ñݳª»á£»¹ä½Ö£»È¥ÂÃÐС¡£¬ËäÈ»×öµÄÊÂÇ鲻ͬ£¬µ«¿ÉÒÔÏà»¥Ìæ»»£¬Î¨Ò»µÄÄ¿±ê¶¼ÊDz¶»ñÃÃ×ӵķ¼ÐÄ¡£
²ßÂÔģʽ½á¹¹
- Context: »·¾³Àà
- Strategy: ³éÏó²ßÂÔÀà
- ConcreteStrategy: ¾ßÌå²ßÂÔÀà
½á¹¹Í¼£º

ʱÐòͼ£º

ÓÅȱµã
- Óŵ㣺²ßÂÔģʽÌṩÁ˶ԡ°¿ª±ÕÔÔò¡±µÄÍêÃÀÖ§³Ö£¬Óû§¿ÉÒÔÔÚ²»ÐÞ¸ÄÔÓÐϵͳµÄ»ù´¡ÉÏÑ¡ÔñËã·¨»òÐÐΪ¡£¸Éµô¸´ÔÓÄÑ¿´µÄif-else¡£
- ȱµã£ºµ÷ÓÃʱ£¬±ØÐëÌáǰ֪µÀ¶¼ÓÐÄÄЩ²ßÂÔģʽÀ࣬²ÅÄÜ×ÔÐоö¶¨µ±Ç°³¡¾°¸ÃʹÓúÎÖÖ²ßÂÔ¡£
ÊÔÓó¡¾°
Ò»¸öϵͳÐèÒª¶¯Ì¬µØÔÚ¼¸ÖÖ¿ÉÌæ»»Ëã·¨ÖÐÑ¡ÔñÒ»ÖÖ¡£²»Ï£ÍûʹÓÃÕß¹ØÐÄË㷨ϸ½Ú£¬½«¾ßÌåËã·¨·â×°½ø²ßÂÔÀàÖС£
×¢ÒâÊÂÏî
Ò»¶¨ÒªÔÚ²ßÂÔÀàµÄ×¢ÊÍÖÐ˵Ã÷¸Ã²ßÂÔµÄÓÃ;ºÍÊÊÓó¡¾°¡£
¼òµ¥ÊµÏÖ
- package strategy;
- public class StrategyPattern
- {
- public static void main(String[] args)
- {
- Context context = new Context();
- Strategy strategyA = new ConcreteStrategyA();
- context.setStrategy(strategyA);
- context.algorithm();
- System. out .println( "-----------------" );
- Strategy strategyB = new ConcreteStrategyB();
- context.setStrategy(strategyB);
- context.algorithm();
- }
- }
- //³éÏó²ßÂÔÀà
- interface Strategy
- {
- public void algorithm(); //²ßÂÔ·½·¨
- }
- //¾ßÌå²ßÂÔÀàA
- class ConcreteStrategyA implements Strategy
- {
- public void algorithm()
- {
- System. out .println( "¾ßÌå²ßÂÔAµÄ²ßÂÔ·½·¨±»·ÃÎÊ£¡" );
- }
- }
- //¾ßÌå²ßÂÔÀàB
- class ConcreteStrategyB implements Strategy
- {
- public void algorithm()
- {
- System. out .println( "¾ßÌå²ßÂÔBµÄ²ßÂÔ·½·¨±»·ÃÎÊ£¡" );
- }
- }
- //»·¾³Àà
- class Context
- {
- private Strategy strategy;
- public Strategy getStrategy()
- {
- return strategy;
- }
- public void setStrategy(Strategy strategy)
- {
- this.strategy=strategy;
- }
- public void algorithm()
- {
- strategy.algorithm();
- }
- }
|
5 ´úÀíģʽ(Proxy)
ÌÔ±¦µê¿Í·þ×ÜÊÇ»áÊÕµ½·Ç³£¶àµÄÖØ¸´ÎÊÌ⣬ÀýÈ磺ÓÐûÓÐÏÖ»õ£¿Ê²Ã´Ê±ºò·¢»õ?·¢Ê²Ã´¿ìµÝ£¿´óÁ¿»Ø´ðÖØ¸´ÐÔµÄÎÊÌâÌ«·³ÁË£¬ÓÚÊǾͳöÏÖÁËСÃÛ»úÆ÷ÈË£¬ËûÀ´°ï¿Í·þ»Ø´ðÄÇЩÒÑÖªµÄÎÊÌ⣬µ±Åöµ½Ð¡ÃÛÎÞ·¨½â´ðµÄÎÊÌâʱ£¬²Å»áתµ½È˹¤¿Í·þ¡£ÕâÀïµÄСÃÛ»úÆ÷È˾ÍÊǿͷþµÄ´úÀí¡£
´úÀíģʽ½á¹¹
´úÀíģʽ°üº¬ÈçϽÇÉ«£º
- Subject: ³éÏóÖ÷Ìâ½ÇÉ«
- Proxy: ´úÀíÖ÷Ìâ½ÇÉ«
- RealSubject: ÕæÊµÖ÷Ìâ½ÇÉ«
½á¹¹Í¼£º

ʱÐòͼ£º

ÓÅȱµã
- Óŵ㣺´úÀí¿ÉÒÔе÷µ÷Ó÷½Óë±»µ÷Ó÷½£¬½µµÍÁËϵͳµÄñîºÏ¶È¡£¸ù¾Ý´úÀíÀàÐͺͳ¡¾°µÄ²»Í¬£¬¿ÉÒÔÆðµ½¿ØÖư²È«ÐÔ¡¢¼õСϵͳ¿ªÏúµÈ×÷Óá£
- ȱµã£ºÔö¼ÓÁËÒ»²ã´úÀí´¦Àí£¬Ôö¼ÓÁËϵͳµÄ¸´ÔÓ¶È£¬Í¬Ê±¿ÉÄܻήµÍϵͳµÄÏàÓ¦ËÙ¶È¡£
ÊÔÓó¡¾°
ÀíÂÛÉÏ¿ÉÒÔ´úÀíÈκζÔÏ󣬳£¼ûµÄ´úÀíģʽÓУº
- Ô¶³Ì(Remote)´úÀí£ºÎªÒ»¸öλÓÚ²»Í¬µÄµØÖ·¿Õ¼äµÄ¶ÔÏóÌṩһ¸ö±¾µØµÄ´úÀí¶ÔÏó£¬Õâ¸ö²»Í¬µÄµØÖ·¿Õ¼ä¿ÉÒÔÊÇÔÚͬһ̨Ö÷»úÖУ¬Ò²¿ÉÊÇÔÚÁíһ̨Ö÷»úÖУ¬Ô¶³Ì´úÀíÓÖ½Ð×ö´óʹ(Ambassador)¡£
- ÐéÄâ(Virtual)´úÀí£ºÈç¹ûÐèÒª´´½¨Ò»¸ö×ÊÔ´ÏûºÄ½Ï´óµÄ¶ÔÏó£¬ÏÈ´´½¨Ò»¸öÏûºÄÏà¶Ô½ÏСµÄ¶ÔÏóÀ´±íʾ£¬ÕæÊµ¶ÔÏóÖ»ÔÚÐèҪʱ²Å»á±»ÕæÕý´´½¨¡£
- Copy-on-Write´úÀí£ºËüÊÇÐéÄâ´úÀíµÄÒ»ÖÖ£¬°Ñ¸´ÖÆ£¨¿Ë¡£©²Ù×÷ÑÓ³Ùµ½Ö»ÓÐÔÚ¿Í»§¶ËÕæÕýÐèҪʱ²ÅÖ´ÐС£Ò»°ãÀ´Ëµ£¬¶ÔÏóµÄÉî¿Ë¡ÊÇÒ»¸ö¿ªÏú½Ï´óµÄ²Ù×÷£¬Copy-on-Write´úÀí¿ÉÒÔÈÃÕâ¸ö²Ù×÷ÑÓ³Ù£¬Ö»ÓжÔÏó±»Óõ½µÄʱºò²Å±»¿Ë¡¡£
- ±£»¤(Protect or Access)´úÀí£º¿ØÖƶÔÒ»¸ö¶ÔÏóµÄ·ÃÎÊ£¬¿ÉÒÔ¸ø²»Í¬µÄÓû§Ìṩ²»Í¬¼¶±ðµÄʹÓÃȨÏÞ¡£
- »º³å(Cache)´úÀí£ºÎªÄ³Ò»¸öÄ¿±ê²Ù×÷µÄ½á¹ûÌṩÁÙʱµÄ´æ´¢¿Õ¼ä£¬ÒÔ±ã¶à¸ö¿Í»§¶Ë¿ÉÒÔ¹²ÏíÕâЩ½á¹û¡£
- ·À»ðǽ(Firewall)´úÀí£º±£»¤Ä¿±ê²»ÈöñÒâÓû§½Ó½ü¡£
- ͬ²½»¯(Synchronization)´úÀí£ºÊ¹¼¸¸öÓû§Äܹ»Í¬Ê±Ê¹ÓÃÒ»¸ö¶ÔÏó¶øÃ»ÓгåÍ»¡£
- ÖÇÄÜÒýÓÃ(Smart Reference)´úÀí£ºµ±Ò»¸ö¶ÔÏó±»ÒýÓÃʱ£¬ÌṩһЩ¶îÍâµÄ²Ù×÷£¬È罫´Ë¶ÔÏó±»µ÷ÓõĴÎÊý¼Ç¼ÏÂÀ´µÈ¡£
¼òµ¥ÊµÏÖ
- package proxy;
- public class ProxyPattern
- {
- public static void main(String[] args)
- {
- Proxy proxy = new Proxy();
- proxy.request();
- }
- }
- //³éÏóÖ÷Ìâ
- interface Subject
- {
- void request();
- }
- //ÕæÊµÖ÷Ìâ
- class RealSubject implements Subject
- {
- public void request()
- {
- System. out .println( "·ÃÎÊÕæÊµÖ÷Ìâ·½·¨..." );
- }
- }
- //´úÀí
- class Proxy implements Subject
- {
- private RealSubject realSubject;
- public void request()
- {
- if (realSubject== null )
- {
- realSubject=new RealSubject();
- }
- preRequest();
- realSubject.request();
- afterRequest();
- }
- public void preRequest()
- {
- System. out .println( "·ÃÎÊÕæÊµÖ÷Ìâ֮ǰµÄÔ¤´¦Àí¡£" );
- }
- public void afterRequest()
- {
- System. out .println( "·ÃÎÊÕæÊµÖ÷ÌâÖ®ºóµÄºóÐø´¦Àí¡£" );
- }
- }
|
6 ¹Û²ìÕßģʽ(Observer)
³ö²îÔÚÍ⣬ÏëÁ˽⺢×ÓÔÚ¼ÒµÄÇé¿ö£¬ÕâʱºòÖ»Òª¼ÓÈë¡°ÏàÇ×Ïà°®Ò»¼ÒÈË¡±Èº£¬ÀϰÖÀÏÂè»á¾³£°Ñº¢×ÓµÄÕÕÆ¬ºÍÊÓÆµ·¢µ½ÈºÀÄãÒª×öµÄ¾ÍÊÇ×÷Ϊһ¸ö¹Û²ìÕߣ¬Ë¢Ò»Ë¢ÈºÀïµÄÐÅÏ¢¾ÍÄܹ»Á˽âÒ»ÇÐÁË¡£
¹Û²ìÕßģʽ½á¹¹
¹Û²ìÕßģʽ°üº¬ÈçϽÇÉ«£º
- Subject£ºÄ¿±ê
- ConcreteSubject £º ¾ßÌåÄ¿±ê
- Observer £º ¹Û²ìÕß
- ConcreteObserver £º ¾ßÌå¹Û²ìÕß
½á¹¹Í¼£º

ʱÐòͼ£º

ÓÅȱµã
- Óŵ㣺½«¸´ÔӵĴ®Ðд¦ÀíÂß¼±äΪµ¥Ôª»¯µÄ¶ÀÁ¢´¦ÀíÂß¼£¬±»¹Û²ìÕßÖ»Êǰ´ÕÕ×Ô¼ºµÄÂß¼·¢³öÏûÏ¢£¬²»ÓùØÐÄËÀ´Ïû·ÑÏûÏ¢£¬Ã¿¸ö¹Û²ìÕßÖ»´¦Àí×Ô¼º¹ØÐĵÄÄÚÈÝ¡£Âß¼Ï໥¸ôÀë´øÀ´¼òµ¥ÇåˬµÄ´úÂë½á¹¹¡£
- ȱµã£º¹Û²ìÕ߽϶àʱ£¬¿ÉÄܻỨ·ÑÒ»¶¨µÄ¿ªÏúÀ´·¢ÏûÏ¢£¬µ«Õâ¸öÏûÏ¢¿ÉÄܽöÒ»¸ö¹Û²ìÕßÏû·Ñ¡£
ÊÊÓó¡¾°
ÊÊÓÃÓÚÒ»¶Ô¶àµÄµÄÒµÎñ³¡¾°£¬Ò»¸ö¶ÔÏó·¢Éú±ä¸ü£¬»á´¥·¢N¸ö¶ÔÏó×öÏàÓ¦´¦ÀíµÄ³¡¾°¡£ÀýÈ磺¶©µ¥µ÷¶È֪ͨ£¬ÈÎÎñ״̬±ä»¯µÈ¡£
×¢ÒâÊÂÏî
±ÜÃâ¹Û²ìÕßÓë±»¹Û²ìÕßÖ®¼äÐγÉÑ»·ÒÀÀµ£¬¿ÉÄÜ»áÒò´Ëµ¼ÖÂϵͳ±ÀÀ£¡£
¼òµ¥ÊµÏÖ
- package observer;
- import java.util.*;
- public class ObserverPattern
- {
- public static void main(String[] args)
- {
- Subject subject = new ConcreteSubject();
- Observer obsA = new ConcreteObserverA();
- Observer obsb = new ConcreteObserverB();
- subject. add (obsA);
- subject. add (obsB);
- subject.setState(0);
- }
- }
- //³éÏóÄ¿±ê
- abstract class Subject
- {
- protected List<Observer> observerList = new ArrayList<Observer>();
- //Ôö¼Ó¹Û²ìÕß·½·¨
- public void add (Observer observer)
- {
- observers. add (observer);
- }
- //ɾ³ý¹Û²ìÕß·½·¨
- public void remove(Observer observer)
- {
- observers.remove(observer);
- }
- public abstract void notify(); //֪ͨ¹Û²ìÕß·½·¨
- }
- //¾ßÌåÄ¿±ê
- class ConcreteSubject extends Subject
- {
- private Integer state;
- public void setState( Integer state){
- this.state = state;
- // ״̬¸Ä±ä֪ͨ¹Û²ìÕß
- notify();
- }
- public void notify()
- {
- System. out .println( "¾ßÌåÄ¿±ê״̬·¢Éú¸Ä±ä..." );
- System. out .println( "--------------" );
- for (Observer obs:observers)
- {
- obs.process();
- }
- }
- }
- //³éÏó¹Û²ìÕß
- interface Observer
- {
- void process(); //¾ßÌåµÄ´¦Àí
- }
- //¾ßÌå¹Û²ìÕßA
- class ConcreteObserverA implements Observer
- {
- public void process()
- {
- System. out .println( "¾ßÌå¹Û²ìÕßA´¦Àí£¡" );
- }
- }
- //¾ßÌå¹Û²ìÕßB
- class ConcreteObserverB implements Observer
- {
- public void process()
- {
- System. out .println( "¾ßÌå¹Û²ìÕßB´¦Àí£¡" );
- }
- }
|
|