当前位置: 首页 > news >正文

做app网站建设劳保手套网站建设

做app网站建设,劳保手套网站建设,摄影网站的实验设计方案,wordpress 文章自定义字段策略模式就是定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。 基本概念 策略模式主要是解决多种算法相似的情况下,使用if...else所带来的复杂和难以维护。当存在系统中有多个类,但是区分它们的是只是它们的直接行为,那我们…

策略模式就是定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。

基本概念

策略模式主要是解决多种算法相似的情况下,使用if...else所带来的复杂和难以维护。当存在系统中有多个类,但是区分它们的是只是它们的直接行为,那我们可以把这些封装成一个一个类,然后进行任意替换。

策略模式存在三种角色:

  • Strategy 策略(算法)抽象
  • ConcreteStrategy 各种策略(算法)的具体实现
  • Context 策略的外部封装类,或者说策略的容器类。根据不同策略执行不同的行为。策略由外部环境决定。

案例

抽象类

public interface Strategy {public void encrypt();
}

定义算法抽象类,方法为加密。

具体实现类

AES加密

public class AESStrategy implements Strategy{@Overridepublic void encrypt() {System.out.println("执行AES");}}

MD5加密

public class MD5Strategy implements Strategy {@Overridepublic void encrypt() {System.out.println("执行MD5");}
}

继承算法抽象类,具体用AES、MD5方法进行实现。

外部环境封装类

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

测试类

public class MainTest {public static void main(String[] args) {Context context = new Context(new AESStrategy());context.encrypt();}
}

小改一下

上面测试使用的时候,需要自己新建一个实例,阅读性不够好,所以就重新用枚举类修改一下。

算法枚举类

public enum StrategyEnums {MD5("MD5算法"){@Overridepublic Class<?> getStrategyClass() {return MD5Strategy.class;}},AES("AES算法"){@Overridepublic Class<?> getStrategyClass() {return AESStrategy.class;}	};public abstract Class<?> getStrategyClass();private String className;StrategyEnums(){}StrategyEnums(String className){this.className= className;}public String getClassName(){return className;}
}

枚举方法返回算法具体实现类的Class,并加上类的算法描述。

public class Context {private Strategy strategy;public Context(StrategyEnums enums) {try {this.strategy = (Strategy) enums.getStrategyClass().newInstance();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}}public void encrypt(){this.strategy.encrypt();}
}

包装类的参数改为枚举值,根据枚举值来构建实例。

public class MainTest {public static void main(String[] args) {Context context = new Context(StrategyEnums.AES);context.encrypt();}
}

测试可用,但是这样的话,就是需要同时维护枚举类,新构建一个算法具体类,同时要维护枚举类,不过就是增加了可读性。

总结

使用策略方式可以提供良好的扩展性、避免大量的if...else的条件判断,算法可以自由切换。当遇到多个类似的算法策略,可以考虑策略模式。

http://www.yayakq.cn/news/200568/

相关文章:

  • 南昌县城乡规划建设局官方网站杂志在线设计网站
  • 个人网站建设价格套餐网站数据分析工具有哪些
  • 怎样做销售产品网站公明 网站建设
  • 做网站用vue吗做企业网站制作
  • 网站开发视频 百度云网站被k申述
  • 网站首页自动下拉广告宜昌优化网站建设
  • 玉环建设局网站公司网站建设论文结束语
  • 成都建设规划网站建外贸网站推广
  • 东莞哪里有网站制作公司nginx伪静态 wordpress
  • 江苏新有建设集团有限公司官方网站自己怎么做网站建设
  • 免费flash网站模板带后台淘宝客源码程序 爱淘宝风格+程序自动采集商品 淘宝客网站模板
  • 最新被百度收录的网站产业园门户网站建设方案
  • 网站如何被收录网站前置审批文件
  • 做reference的网站深圳燃气公司有哪些
  • 怎样做淘宝的导购网站推广网站logo做黑页
  • 网站上传不了照片公司签约网站
  • 自己做网站哪里最好上海的做网站的公司
  • 如何建 网站网站职业培训学校
  • 吉安市建设规划局网站国外装修网站模板
  • 学做网站论坛课程政务服务大厅网站建设方案
  • 六灶网站建设香河县建设局网站
  • 专门做win7系统的网站东莞本地生活网
  • 顺德网站制作案例机构怎么建设网站挣钱
  • 什么是网站主机南昌做网站公司
  • 爱网站古典 网站模板
  • 深圳定制网站制作网络培训系统入口
  • 手机移动端网站怎么做的ai智能设计logo免费
  • 查找5个搜索引擎作弊的网站一般做网站销售提成
  • 长沙市网站制作电话php仿博客园网站
  • 网站建设与推广的实训报告网站呢建设