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

企业年金怎么缴纳成都网站优化方式

企业年金怎么缴纳,成都网站优化方式,杭州网站建设技术支持,做翻译的网站1. 什么是策略模式#xff08;Strategy Pattern#xff09; 定义 策略模式#xff08;Strategy Pattern#xff09;的原始定义是#xff1a;定义一系列算法#xff0c;将每一个算法封装起来#xff0c;并使它们可以相互替换。策略模式让算法可以独立于使用它的客户端而…1. 什么是策略模式Strategy Pattern 定义 策略模式Strategy Pattern的原始定义是定义一系列算法将每一个算法封装起来并使它们可以相互替换。策略模式让算法可以独立于使用它的客户端而变化。 目的 策略模式的目的是在软件开发中当实现某一个功能存在多种算法或者策略时可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。 比如网购你可以选择工商银行、农业银行、建设银行等等但是它们提供的算法都是一致的就是帮你付款。 角色 策略模式的主要角色如下 抽象策略Strategy类这是一个抽象角色通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。具体策略Concrete Strategy类实现了抽象策略定义的接口提供具体的算法实现或行为。环境或上下文Context类是使用算法的角色持有一个策略类的引用最终给客户端调用。 UML类图 在策略模式中可以定义一些独立的类来封装不同的算法,每一个类封装一种具体的算法,在这里每一个封装算法的类都可以被称为一种策略,为了保证这些策略在使用时具有一致性,一般会提供一个抽象的策略类来做算法的声明.而每种算法对应一个具体的策略类。 实现代码 // 抽象策略类 public interface Strategy {void algorithm(); }// 具体策略类A public class ConcreteStrategyA implements Strategy {Overridepublic void algorithm() {System.out.println(执行策略A);} }// 具体策略类B public class ConcreteStrategyB implements Strategy {Overridepublic void algorithm() {System.out.println(执行策略B);} }// 环境类 public class Context {// 维持一个对抽象策略类的引用private Strategy strategy;public Context(Strategy strategy) {this.strategy strategy;}// 调用策略类中的算法public void algorithm() {strategy.algorithm();} }// 客户端代码 public class Client {public static void main(String[] args) {Strategy strategyA new ConcreteStrategyA();Context context new Context(strategyA); // 可以在运行时指定类型context.algorithm();} }2.优缺点 优点 易于扩展和维护由于不同的算法被封装在不同的类中所以我们可以很容易地添加新的算法或修改已有算法而不需要修改客户端的代码。提高代码的可读性将不同的算法封装在不同的类中使得代码更加模块化易于理解和维护。消除大量的条件语句使用策略模式我们可以将不同的算法替换成不同的类从而消除大量的if-else语句使得代码更加简洁和易于理解。 缺点 需要额外的类和接口使用策略模式我们需要为每个算法都创建一个独立的类从而增加了代码的复杂度。客户端需要知道所有的策略类使用策略模式客户端需要知道所有的策略类以便在运行时选择合适的策略。这可能会增加代码的复杂度。 应用场景 策略模式适用于以下场景 需要根据不同的条件选择不同的算法时例如计算器程序需要根据用户输入的运算符选择相应的计算方法。需要在运行时动态地选择算法时例如某个系统需要根据用户的配置或环境变量来选择合适的算法。需要将算法的实现细节与客户端代码分离时例如某个系统需要根据不同的数据来源来解析数据但是客户端并不关心数据的解析细节。 总结 策略模式通过定义一系列算法将每一个算法封装起来并使它们可以相互替换从而让算法可以独立于使用它的客户端而变化。通过使用策略模式可以提高代码的扩展性、可读性和维护性同时也可以消除大量的条件语句。 在工作中为了消除代码中的大量 if-else 语句并提升代码的可维护性和扩展性可以使用策略模式。下面是详细的实现步骤和代码示例。 3.如何用设计模式消除代码中的ifelse(你在工作中使用过哪些设计模式) 不使用设计模式 这是一个请假审批流程的代码示例包含员工类、请假单类和审核类直接使用 if-else 语句来处理不同的审批规则。 public class Employee {private String name; // 姓名private int level; // 级别: P6, P7, P8// Constructor, getters and setters }public class LeaveForm {private Employee employee; // 员工private String reason; // 请假原因private int days; // 天数private int type; // 类型: 0-病假, 1-婚丧假, 2-年假// Constructor, getters and setters }public class LeaveService {public void audit(LeaveForm leaveForm) {// 3天以下婚丧假, 自动通过if (leaveForm.getDays() 3 leaveForm.getType() 1) {System.out.println(三天以下婚丧假 无需审批自动通过!);}// 3天以上婚丧假else if (leaveForm.getDays() 3 leaveForm.getType() 1) {System.out.println(三天以上婚丧假 进入上级审批流程!);}// 总经理请假else if (leaveForm.getEmployee().getLevel() 9) {System.out.println(总经理请假无需审批自动通过!);}// 一天病假else if (leaveForm.getDays() 1 leaveForm.getType() 0) {System.out.println(一天病假无需审批自动通过!);}// 一天以上病假else if (leaveForm.getDays() 1 leaveForm.getType() 0) {System.out.println(一天以上病假进入审批流程!);}} }使用策略模式进行优化 通过策略模式将所有的 if-else 分支的业务逻辑抽取为各种策略类判断条件和执行逻辑封装到对应的策略类中让客户端去依赖策略接口保证具体策略类的改变不影响客户端。 策略接口 public interface AuditStrategy {boolean isSupport(LeaveForm leaveForm);void audit(LeaveForm leaveForm);int getPriority();String getName(); }具体策略类 public class AuditStrategyImpl_1 implements AuditStrategy {Overridepublic boolean isSupport(LeaveForm leaveForm) {return leaveForm.getDays() 3 leaveForm.getType() 1;}Overridepublic void audit(LeaveForm leaveForm) {System.out.println(leaveForm);System.out.println(三天以下婚丧假 无需审批自动通过!);}Overridepublic int getPriority() {return 0;}Overridepublic String getName() {return 三天以下婚假审批规则;} }public class AuditStrategyImpl_2 implements AuditStrategy {Overridepublic boolean isSupport(LeaveForm leaveForm) {return leaveForm.getDays() 3 leaveForm.getType() 1;}Overridepublic void audit(LeaveForm leaveForm) {System.out.println(leaveForm);System.out.println(三天以上婚丧假 进入上级审批流程!);}Overridepublic int getPriority() {return 0;}Overridepublic String getName() {return 三天以上婚丧假审批规则;} }public class AuditStrategyImpl_3 implements AuditStrategy {Overridepublic boolean isSupport(LeaveForm leaveForm) {return leaveForm.getEmployee().getLevel() 9;}Overridepublic void audit(LeaveForm leaveForm) {System.out.println(leaveForm);System.out.println(总经理请假无需审批自动通过!);}Overridepublic int getPriority() {return 999;}Overridepublic String getName() {return 总经理请假审批规则;} }策略工厂 public class AuditStrategyFactory {private final static AuditStrategyFactory factory new AuditStrategyFactory();private ListAuditStrategy auditStrategyList new ArrayList();private AuditStrategyFactory() {auditStrategyList.add(new AuditStrategyImpl_1());auditStrategyList.add(new AuditStrategyImpl_2());auditStrategyList.add(new AuditStrategyImpl_3());// Add more strategies here}public static AuditStrategyFactory getInstance() {return factory;}public AuditStrategy getAuditStrategy(LeaveForm leaveForm) {AuditStrategy auditStrategy null;for (AuditStrategy strategy : auditStrategyList) {if (strategy.isSupport(leaveForm)) {if (auditStrategy null || strategy.getPriority() auditStrategy.getPriority()) {auditStrategy strategy;}}}if (auditStrategy null) {throw new RuntimeException(没有匹配到请假审核规则);}return auditStrategy;} }业务类 public class LeaveServiceNew {public void audit(LeaveForm leaveForm) {AuditStrategyFactory factory AuditStrategyFactory.getInstance();AuditStrategy strategy factory.getAuditStrategy(leaveForm);strategy.audit(leaveForm);} }测试 public class Client {public static void main(String[] args) {LeaveServiceNew leaveServiceNew new LeaveServiceNew();LeaveForm form1 new LeaveForm(new Employee(李总经理, 9), 甲流发烧, 10, 0);leaveServiceNew.audit(form1);LeaveForm form2 new LeaveForm(new Employee(打工人1, 2), 甲流发烧, 2, 0);leaveServiceNew.audit(form2);LeaveForm form3 new LeaveForm(new Employee(打工人2, 3), 结婚, 2, 1);leaveServiceNew.audit(form3);LeaveForm form4 new LeaveForm(new Employee(打工人3, 4), 请年假,休息休息, 5, 2);leaveServiceNew.audit(form4);} }添加新规则 如果需要添加新的年假规则只需要创建新的策略类并添加到工厂中即可。 public class AuditStrategyImpl_6 implements AuditStrategy {Overridepublic boolean isSupport(LeaveForm leaveForm) {return leaveForm.getType() 2;}Overridepublic void audit(LeaveForm leaveForm) {System.out.println(leaveForm);System.out.println(查询您的剩余年假天数...);System.out.println(剩余年假还有6天, 进入审批流程);}Overridepublic int getPriority() {return 0;}Overridepublic String getName() {return 年假审批规则;} }在工厂类中添加新的策略 private AuditStrategyFactory() {auditStrategyList.add(new AuditStrategyImpl_1());auditStrategyList.add(new AuditStrategyImpl_2());auditStrategyList.add(new AuditStrategyImpl_3());auditStrategyList.add(new AuditStrategyImpl_6()); // 新添加的年假规则// Add more strategies here }通过这种方式已经成功消除了 if-else 结构每当新来了一种请假规则只需要添加新的规则处理策略并修改工厂中的集合。如果要使得程序符合开闭原则可以通过反射机制动态地加载策略类。 使用反射机制动态加载策略类 public class AuditStrategyFactory {private final static AuditStrategyFactory factory new AuditStrategyFactory();private ListAuditStrategy auditStrategyList new ArrayList();private AuditStrategyFactory() {// 动态加载策略类try {String packageName com.example.strategies; // 策略类所在包名ClassLoader classLoader Thread.currentThread().getContextClassLoader();String path packageName.replace(., /);EnumerationURL resources classLoader.getResources(path);ListFile dirs new ArrayList();while (resources.hasMoreElements()) {URL resource resources.nextElement();dirs.add(new File(resource.getFile()));}for (File directory : dirs) {auditStrategyList.addAll(findClasses(directory, packageName));}} catch (Exception e) {e.printStackTrace();}}private ListAuditStrategy findClasses(File directory, String packageName) throws ClassNotFoundException, InstantiationException, IllegalAccessException {ListAuditStrategy strategies new ArrayList();if (!directory.exists()) {return strategies;}File[] files directory.listFiles();for (File file : files) {if (file.isDirectory()) {strategies.addAll(findClasses(file, packageName . file.getName()));} else if (file.getName().endsWith(.class)) {String className packageName . file.getName().substring(0, file.getName().length() - 6);Class? clazz Class.forName(className);if (AuditStrategy.class.isAssignableFrom(clazz) !Modifier.isAbstract(clazz.getModifiers())) {strategies.add((AuditStrategy) clazz.newInstance());}}}return strategies;}public static AuditStrategyFactory getInstance() {return factory;}public AuditStrategy getAuditStrategy(LeaveForm leaveForm) {AuditStrategy auditStrategy null;for (AuditStrategy strategy : auditStrategyList) {if (strategy.isSupport(leaveForm)) {if (auditStrategy null || strategy.getPriority() auditStrategy.getPriority()) {auditStrategy strategy;}}}if (auditStrategy null) {throw new RuntimeException(没有匹配到请假审核规则);}return auditStrategy;} }通过这种方式策略类可以动态地从指定包中加载实现了真正的开闭原则。
http://www.w-s-a.com/news/332968/

相关文章:

  • 宁波海曙网站建设市场营销管理
  • 网站被降权了怎么办做网站网页维护手机App开发
  • 营销型网站建设熊掌号tomcat 网站开发
  • 东莞网站建设seo广州 flash 网站
  • js网站评论框租房网站那些地图区域统计怎么做的
  • 企业门户网站平台建设招标采购文件长沙做网站找哪家好
  • 关于实验室建设的英文网站图文分销系统开发
  • wordpress 媒体库管理自己的网站什么做优化
  • 网站建设基本流程价格厦门seo网站推广
  • 辽宁响应式网站建设价格企业所得税率
  • 网站编辑及seo招聘上海做网站公司做网站的公司
  • 杭州四喜做网站建设么ja.wordpress.org
  • 旅游网站策划书企业公司名字大全
  • 营销型网站的标准郑州新密网站建设
  • 建设网站的公司管理公司网站设计
  • 手机网站有什么区别是什么意思不让网站开发公司进入后台
  • 网站正在建设中_敬请期待做宠物店网站
  • 个体营业执照可以做网站服务吗宣传品牌网站建设
  • 做平台是做网站和微信小程序的好别邯郸捕风科技有限公司
  • 公司做哪个网站比较好巴顿品牌设计官网
  • 济宁北湖建设局网站我要推广
  • mc网站的建设大型网站开发
  • 给网站做推广一般花多少钱全国最大的外发加工网
  • linux 网站301江西seo推广方案
  • c2c电子商务网站定制开发wordpress html单页
  • 查询网站空间商自己做的网站如何放到微信
  • 现在网站开发哪个语言好月嫂公司网站建设构思
  • 腾讯云免费网站建设网站设计一级网页
  • 网站备案系统验证码出错的解决方案wordpress+论坛+注册
  • 代做毕设的网站先做网站先备案