怎样做视频网站,网站宣传推广,百度可信网站,重庆市网站建设目录 什么是策略模式
应用场景
业务场景实现
抽象类
实现类
Context上下文
测试类
策略模式的优缺点 什么是策略模式
他将定义的算法家族、分别封装起来#xff0c;让他们之间可以相互替换#xff0c;从而让算法的变化不会影响到使用算法的用户。
策略模式使用的就是…目录 什么是策略模式
应用场景
业务场景实现
抽象类
实现类
Context上下文
测试类
策略模式的优缺点 什么是策略模式
他将定义的算法家族、分别封装起来让他们之间可以相互替换从而让算法的变化不会影响到使用算法的用户。
策略模式使用的就是面向对象的继承和多态机制从而实现同一行为在不同场景下具备不同实现。
应用场景 策略模式在生活中应用很多。比如一个人的胶水比例与他的工资有关不同的工资水平对应不同的税率再比如我们在下单前需要选择支付方式或者是商店折扣、比如支付宝、微信等。
策略模式可以解决在多种算法相似的情况下避免使用if.else或switch…case带来的复杂性和臃肿性。在日常业务开发中策略模式适用于以下场景 首先看下策略模式的通用UML类图 从类图中我们可以看到策略模式主要包含三种角色
上下文角色Context
用来操作策略的上下文环境屏蔽高层模块客户端对策略算法的直接访问封装可能存在的变化。
抽象策略角色Strategy
规定策略或算法的行为
具体策略角色Concrete Strategy
具体的策略或算法实现 业务场景实现
抽象类
/*** 策略类定义所有支持的算法公共接口*/
/*** 抽象算法类*/
public abstract class strategy {//算法方法public abstract void algorithmInterface();}
实现类
public class ConcreteStrategyA extends strategy{Overridepublic void algorithmInterface() {System.out.println(算法A实现);}
}public class ConcreteStrategyB extends strategy{Overridepublic void algorithmInterface() {System.out.println(算法B实现 );}
}
public class ConcreteStrategyC extends strategy{Overridepublic void algorithmInterface() {System.out.println(算法C实现);}
}Context上下文
/*** 上下文维护对象的引用*/
public class content {strategy strategy;public content(策略模式.strategy strategy) {this.strategy strategy;}public void contentInterface(){//根据具体的策略对象调用琦算法的方法strategy.algorithmInterface();}
}
测试类
public class main {public static void main(String[] args) {content content1;content1 new content(new ConcreteStrategyA());content1.contentInterface();content1 new content(new ConcreteStrategyB());content1.contentInterface();content1 new content(new ConcreteStrategyC());content1.contentInterface();}
}
策略模式的优缺点
优点
策略模式符合开闭原则避免使用多重条件转移语句如if…else和switch这种。使用策略模式可以提高算法的保密性和安全性
缺点
客户端需要知道所有的策略并且自行决定使用哪一个策略类代码中会产生非常多的策略类造成代码的臃肿怎加维护难度。