2022
我们一起努力

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

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

u=2033150090,3817057770&fm=15&gp=0

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,若引用不当,请联系修改。

赞(0)
文章名称:《讲解一下Java设计模式之策略模式》
文章链接:https://www.fzvps.com/181449.html
本站文章来源于互联网,如有侵权,请联系管理删除,本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
图片版权归属各自创作者所有,图片水印出于防止被无耻之徒盗取劳动成果的目的。

评论 抢沙发

评论前必须登录!