1.软文推荐

2.软文推荐

3.软文推荐

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

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

相关文章 8

1

韩国私人vps(韩国的私人医院) 3分钟前

目录:1、韩国VPS服务器去哪里租用?2、韩国vps服务器租用3、韩国vps多少钱一年4、韩国VPS租用优势与缺陷是啥?5、vps韩国uplus线路好吗6、最...

2

5 款最酷的 Linux 终端模拟器 4分钟前

对于Linux系统管理员来说,终端模拟器是必不可少的工具,现在很多可供选择的 Linux,所以这种思想自然也适用于终端模拟器。实际上,如果...

3

浙江vps高防(高防vps评测) 6分钟前

目录:1、vps怎么做安全策略2、我可以买个群英高防VPS当盾机吗3、Vps网速怎么样?推荐一款好的vps主机给大家4、VPS高防服务器哪个最好不错...

4

详解pstack命令具体使用方法 9分钟前

pstack用来跟踪进程栈,这个命令在排查进程问题时非常有用,比如我们发现一个服务一直处于work状态(如假死状态,好似死循环),使用这...

5

D语言基础教程 10分钟前

D语言是一种编程语言,具备多范型,例如面向对象、指令式。由沃尔特布莱特和安德烈亚历山德雷斯库所开发,起源自C++,深受C++的影响,...

6

firewall防火墙(firewall防火墙默认情况下设置的默认区域为) 12分钟前

目录:1、操作系统的防火墙Windows Firewall服务无法启动2、防火墙是什么?3、什么是“防火墙”(firewall)?操作系统的防火墙Windows Firewall服务无...

8

Linux系统中查看外网ip的不同方法 15分钟前

Linux系统中如何查看外网ip?本篇文章将通过不同的方法为大家分享一下Linux系统中查看外网ip的具体方法, 有需要的小伙伴可以参考一下。...