梦幻之旅

DEBUG - 天道酬勤

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  671 随笔 :: 6 文章 :: 256 评论 :: 0 Trackbacks
策略模式
     它属于对象行为型模式,主要针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。通常,策略模式适用于当一个应用程序需要实现一种特定的服务或者功能,而且该程序有多种实现方式时使用。
它由以下几个部份组成:
    1.环境对象:该类中实现了对抽象策略中定义的接口或者抽象类的引用。
    2.抽象策略对象:它可由接口或抽象类来实现。
    3.具体策略对象:它封装了实现同不功能的不同算法。
各个组成部份之间的关系为:
   
举例:
策略接口类:
package strategy;

/**
 * <ul>
 * <li>Title:[IStrategy]</li>
 * <li>Description: [策略接口]</li>
 * <li>Copyright 2009 Upengs Co., Ltd.</li>
 * <li>All right reserved.</li>
 * <li>Created by [Huyvanpull] [2011-7-28]</li>
 * <li>Midified by [modifier] [modified time]</li>
 * </ul>
 * 
@version 1.0  
 
*/

public interface IStrategy
{   
    
public void oparator();
}


具体策略类A:
package strategy;

public class StrategyA implements IStrategy
{

    
public void oparator()
    
{
        System.out.println(
"十而围之");
    }
   
}


具体策略类B:
package strategy;

public class StrategyB implements IStrategy
{

    
public void oparator()
    
{
        System.out.println(
"五而攻之");
    }
   

}


具体策略类C
package strategy;

public class StrategyC implements IStrategy
{
    
public void oparator()
    
{
        System.out.println(
"敌而分之");
    }
   

}



上下文环境类:
package strategy;

/**
 * <ul>
 * <li>Title:[Context]</li>
 * <li>Description: [上下文环境]</li>
 * <li>Copyright 2009 Upengs Co., Ltd.</li>
 * <li>All right reserved.</li>
 * <li>Created by [Huyvanpull] [2011-7-28]</li>
 * <li>Midified by [modifier] [modified time]</li>
 * </ul>
 * 
@version 1.0  
 
*/

public class Context
{   
    
/** 策略 */
    
private IStrategy strategy;
    
    
public Context(IStrategy strategy)
    
{
        
this.strategy = strategy;
    }

    
    
/**
     * <ul>
     * <li>Description:[作战]</li>
     * <li>Created by [Huyvanpull] [2011-7-28]</li>
     * <li>Midified by [modifier] [modified time]</li>
     * </ul>
     
*/

    
public void fight()
    
{
        
this.strategy.oparator();
    }

}


测试类:
package strategy;

public class Test
{   
    
public static void main(String[] args)
    
{
        
// 我于敌人力量十倍
        Context context = new Context(new StrategyA());
        context.fight();
        
        
// 我于敌人力量五倍
        context = new Context(new StrategyB());
        context.fight();
        
        
// 我于敌人力量一倍
        context = new Context(new StrategyC());
        context.fight();
    }

}


策略模式的优点:
    1.提供了一种代替继承的方法,而且既保持了继承的优点,又保持了继承的灵活性.
    2.封装了算法,使系统更加灵活.

策略模式的缺点:
    每一个策略增加了一个类,使系统的类会过多.
posted on 2011-07-28 01:31 HUIKK 阅读(180) 评论(0)  编辑  收藏 所属分类: Design Patterns

只有注册用户登录后才能发表评论。


网站导航: