zoukankan      html  css  js  c++  java
  • 策略模式

    应用场景:

    1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
    2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。

    首先看代码,了解实现思路,然后进行总结,前面讲一堆,作为新手,直接懵了!

     

    一、抽象策略角色: 策略类,通常由一个接口或者抽象类实现。

    1、接口

    定义一个方法,在实现类中实现它,用于执行“加、减”操作

    /*
     * 策略接口
     */
    public interface Strategy {
    
    	public int doOperation(int num1 , int num2);
    	
    }
    

     

    二、具体策略角色:包装了相关的行为。

    1、第一个实现类:执行“加”操作

    /*
     * 策略接口实现类:加
     */
    public class OperationAdd implements Strategy {
    
    	@Override
    	public int doOperation(int num1, int num2) {
    		return num1 + num2;
    	}
    
    }
    

     

    2、第二个实现类:执行“减”操作

    /*
     * 策略接口实现类:减
     */
    public class OperationSubstract implements Strategy{
    
    	@Override
    	public int doOperation(int num1, int num2) {
    		return num1 - num2;
    	}
    
    }
    

     

    三、环境角色:持有一个策略类的引用,最终给客户端调用。

    在此为:Context类 ,定义 当它改变策略 Strategy 时的行为变化。

    public class Context {
    
    	private Strategy strategy ;
    	
    	//new "加"对象,Strategy为"加"实现类; new "减"对象,Strategy为"减"实现类;
    	public Context(Strategy strategy){	
    		this.strategy = strategy;
    	}
    	
    	public int executeStrategy(int num1, int num2){
    	      return strategy.doOperation(num1, num2);
    	}
    }
    

     

    四、Main类

     

    public class StrategyPatternDemo {
    	
    	public static void main(String[] args) {
    		
    		//new "加"对象
    		Context context = new Context(new OperationAdd());
    		System.out.println("10 + 5 = " + context.executeStrategy(10, 5));
    		
    		//new "减"对象
    		context = new Context(new OperationSubstract());        
    	    System.out.println("10 - 5 = " + context.executeStrategy(10, 5));
    
    	}
    	
    }
    

     

    设计原则一:找出程序中可能需要变化的地方和不需要变化的地方,将它们独立开来。让系统中的某部分改变不会影响其他部分。

    设计原则二:针对接口编程,而不是针对实现。

      比如,为了实现复用,采用继承父类的方法,子类就都继承了父类的这些行为;但是有时候,父类的这些方法,不同的子类可能想要的不一样,这不是想要的结果;

      面向接口编程,接口定义一个方法,接口的实现类根据不同行为来分别实现。在运行时可以动态选择具体要执行的行为,比如上面Main方法里,需要什么行为,就new哪个接口的实现类。

    设计原则三:多用组合,少用继承。

      "加"和"减"这两种不同的行为,我们分别为其建立两组不同的行为类,然后在Context类中通过接口实例变量结合起来,这就是”组合“。使得系统具有很大的弹性,还可以”在运行时动态地改变行为“。

  • 相关阅读:
    Software Solutions CACHE COHERENCE AND THE MESI PROTOCOL
    CACHE COHERENCE AND THE MESI PROTOCOL
    Multiprocessor Operating System Design Considerations SYMMETRIC MULTIPROCESSORS
    Organization SYMMETRIC MULTIPROCESSORS
    PARALLEL PROCESSING
    1分钟内发送差评邮件
    Secure Digital
    SYMMETRIC MULTIPROCESSORS
    A Taxonomy of Parallel Processor Architectures
    parallelism
  • 原文地址:https://www.cnblogs.com/Donnnnnn/p/7552720.html
Copyright © 2011-2022 走看看