java设计模式八之策略模式

前言:

   Strategy模式也叫策略模式,是行为模式之一,它对一系列算法加以封装,并且算法可以相互切换,让算法独立于使用它的客户而独立变化,首先为所有算法定义一个抽象的算法接口,每种算法都继承这个接口,并加以封装和实现,具体算法交由客户端决定。


使用场景:

      1.同一个问题有多种处理方式,只有行为不同。

      2.用很多if ..  else if...来判断一个抽象类的子类的执行


怎么实现:

       算法抽象类

       算法具体实现

       策略的外部封装类

代码:

    创建一个加密算法的抽象父类:

package com.xhx.designpatter;

/**
 * xuhaixing
 * 2018/6/18 18:13
 *
 * 策略的抽象
 **/
public interface Strategy {
    void encrypt();
}

具体实现类

md5加密:

package com.xhx.designpatter;

/**
 * xuhaixing
 * 2018/6/18 18:15
 * 策略的具体实现,不与业务代码在一起,还可以独立演化
 **/
public class MD5Strategy implements Strategy {
    public void encrypt() {
        System.out.println("执行md5加密");
    }
}

mds加密:

package com.xhx.designpatter;

/**
 * xuhaixing
 * 2018/6/18 18:16
 **/
public class MDSStrategy implements Strategy {
    public void encrypt() {
        System.out.println("执行MDS加密");
    }
}

执行策略的类:根据传入的策略,执行

package com.xhx.designpatter;

/**
 * xuhaixing
 * 2018/6/18 18:20
 *
 * 策略的外部封装类,根据不同策略执行不同行为,策略由外部环境决定
 **/
public class Context {
    private Strategy strategy;

    public Context(Strategy strategy){
        this.strategy=strategy;
    }
    public void encrypt(){
        this.strategy.encrypt();
    }
}

测试方法:

package com.xhx.designpatter;

/**
 * xuhaixing
 * 2018/6/18 18:19
 **/
public class App {
    public static void main(String[] args) {
        //具体执行哪个策略由外部环境决定,这里可以融合工厂模式
        //Context context = new Context(new MD5Strategy());
        Context context = new Context(new MDSStrategy());
        context.encrypt();
    }
}

在使用过程中可以把创建策略对象放到工厂中,在执行策略类中根据传入的策略对象或者传入的条件,执行相应的策略。

我的github代码地址

猜你喜欢

转载自blog.csdn.net/u012326462/article/details/80726060