[原创]设计模型探索D-Strategy parttern 之三十六计

[原创]设计模型探索D-Strategy parttern 之三十六计
策略模式
     它属于对象行为型模式,主要针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。通常,策略模式适用于当一个应用程序需要实现一种特定的服务或者功能,而且该程序有多种实现方式时使用。
它由以下几个部份组成:
    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.封装了算法,使系统更加灵活.

策略模式的缺点:
    每一个策略增加了一个类,使系统的类会过多.

你可能感兴趣的:([原创]设计模型探索D-Strategy parttern 之三十六计)