讲解一下Java设计模式之策略模式

2023-11-27 0 471

策略模式:针对一组算法,将每一个算法封装到具有共同接口的独立的类中,使得它们可以互换。

1.什么是策略模式

定义一系列算法,把它们一个个封装起来,并且使他们可以相互替换。

通俗的讲,实现同一个功能,有多种方法或策略。可以把这些方法或策略提取并封装起来。需要使用哪种方法,传对应的对象进来就行。

2.如何实现

1)定义一个策略接口,该接口定义若干抽象方法。

2)具体策略,实现策略接口,并实现接口中定义的方法。

3)封装调用类,持有策略接口的引用。当用户需要完成某项功能时,只需向这个类传入相应的策略对象,并调用方法即可。

3.代码实现

以文件的加密解密为例做说明。

1)策略接口,定义策略名

/**
* 策略接口
*/
public interface EncodeStrategy {
   /**
    * 加密算法
    * @param file
    */
   public abstract void encryptFile(File file);
   /**
    * 解密算法
    * @param file
    * @return
    */
   public abstract String decryptFile(File file);
}

2)具体策略类1

/**
* 具体策略
*/
public class AESEncode implements EncodeStrategy {
   @Override
   public void encryptFile(File file) {
       //省略具体细节
   }
   @Override
   public String decryptFile(File file) {
       //省略具体细节
       return null;
   }
}

具体策略类2

public class Base64Encode implements EncodeStrategy {
   @Override
   public void encryptFile(File file) {
       //省略具体细节
   }
   @Override
   public String decryptFile(File file) {
       //省略具体细节
       return null;
   }
}

3)封装调用类

/**
* 封装调用类,需要用到具体策略,只需传入其对象即可
*/
public class FileEncode{
   /**
    * 策略接口的引用
    */
   EncodeStrategy strategy;
   public FileEncode(EncodeStrategy strategy){
       this.strategy = strategy;
   }
   //根据传入的具体策略对象,调用其方法
   public void encryptFile(File file) {
       strategy.encryptFile(file);
   }
   //根据传入的具体策略对象,调用其方法
   public String decryptFile(File file) {
       return strategy.decryptFile(file);
   }
}

4)测试代码

public class TestStrategy {
   public static void main(String args []){
       File file = new File("d:\test.txt");
       //调用策略1 实现加密
       FileEncode fileEncode = new FileEncode(new AESEncode());
       fileEncode.encryptFile(file);
       //调用策略2 实现加密
       fileEncode = new FileEncode(new Base64Encode());
       fileEncode.encryptFile(file);
   }
}
public class TestStrategy {
   public static void main(String args []){
       File file = new File("d:\test.txt");
       //调用策略1 实现加密
       FileEncode fileEncode = new FileEncode(new AESEncode());
       fileEncode.encryptFile(file);
       //调用策略2 实现加密
       fileEncode = new FileEncode(new Base64Encode());
       fileEncode.encryptFile(file);
   }
}

本文来源:www.lxlinux.net/11055.html,若引用不当,请联系修改。

相关文章

猜你喜欢
官方客服团队

为您解决烦忧 - 24小时在线 专业服务

  • 0 +

    访问总数

  • 0 +

    会员总数

  • 0 +

    文章总数

  • 0 +

    今日发布

  • 0 +

    本周发布

  • 4975 +

    运行天数

你的前景,远超我们想象