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

网站建设幽默自己想开个网站怎么弄

网站建设幽默,自己想开个网站怎么弄,企业营销型网站建设的可行性,开放平台设计1、策略模式定义: 策略模式(Strategy Pattern)定义了一组策略,分别在不同类中封装起来,每种策略都可以根据当前场景相互替换,从而使策略的变化可以独立于操作者。比如我们要去某个地方,会根据距…

1、策略模式定义:

策略模式(Strategy Pattern)定义了一组策略,分别在不同类中封装起来,每种策略都可以根据当前场景相互替换,从而使策略的变化可以独立于操作者。比如我们要去某个地方,会根据距离的不同来选择不同的出行方式,这些出行方式即不同的策略。

个人理解:
就是定义了一个策略接口,然后有多种策略实现类去实现策略接口。

2、何时使用策略模式

阿里开发规约-编程规约-控制语句-第六条 :超过 3 层的 if-else 的逻辑判断代码可以使用卫语句、策略模式、状态模式等来实现。

相信大家都见过这种代码:


if (conditionA) {逻辑1
} else if (conditionB) {逻辑2
} else if (conditionC) {逻辑3
} else {逻辑4
}

这种代码虽然写起来简单,但是很明显违反了面向对象的2个基本原则:

  • 单一职责原则(一个类应该只有一个发生变化的原因):因为之后修改任何一个逻辑,当前类都会被修改
  • 开闭原则(对扩展开发,对修改关闭):如果此时需要添加(删除)某个逻辑操作,那么就会修改原来的代码

尤其是当if-else 块中的代码量比较大时,后续代码的扩展和维护就会逐渐变得非常困难且容易出错,使用switch 语句也同样避免不了以上两个问题。

比较好的实践:

  • if-else 不超过 2 层,块中代码 1~5 行,直接写到块中,否则封装为方法
  • if-else 超过 2 层,但块中的代码不超过 3 行,尽量使用卫语句
  • if-else 超过 2 层,且块中代码超过 3 行,尽量使用策略模式

3、策略模式实践

在Spring中,如何巧妙的运用策略模式。

3.1、需求背景

我们按照前面说的,我们以去某个地方为由,会根据距离的不同而选择不同的出行方式。

出行的策略(方式):

  • 步行
  • 出租车
  • 地铁

3.2、第一步,定义策略接口

首先定义策略接口,包括两个方法:

  1. 获取策略类型的方法
  2. 处理策略逻辑的方法
public interface ActionHandler {/***	获取策略的类型*/public String actionMethod();/***	处理策略的逻辑*/public Object handler();
}

3.3、第二步,相关策略实现

这里我定义了一个枚举类,用来表示策略的类型及其含义:

public enum ActionMethodEnum {WALK("by_walk","步行"),CAR("by_car","出租车"),SUBWAY("by_subway","地铁"),CYCLE("by_cycle","自行车");private String method;private String desc;ActionMethodEnum(String method,String desc){this.method = method;this.desc = desc;}public String getMethod() {return method;}public String getDesc() {return desc;}
}

步行策略实现类:

@Component
public class ByWalkActionHandler implements ActionHandler {@Overridepublic String actionMethod() {return ActionMethodEnum.WALK.getMethod();}@Overridepublic Object handler() {System.out.println("步行出行。。");return ActionMethodEnum.WALK.getDesc();}
}

出租车策略实现类:

@Component
public class ByCarActionHandler implements ActionHandler {@Overridepublic String actionMethod() {return ActionMethodEnum.CAR.getMethod();}@Overridepublic Object handler() {System.out.println("出租车出行。。。");return ActionMethodEnum.CAR.getDesc();}
}

地铁策略实现类:

@Component
public class BySubwayActionHandler implements ActionHandler {@Overridepublic String actionMethod() {return ActionMethodEnum.SUBWAY.getMethod();}@Overridepublic Object handler() {System.out.println("地铁出行。。。");return ActionMethodEnum.SUBWAY.getDesc();}
}

3.4、建立策略的简单工厂

Tips:
这里使用简单工厂是为了管理我们的策略实现类,将这些策略放入一个Map集合中,后续可以根据策略的类型获取对应的策略处理器。

@Component
public class ActionMethodContext implements InitializingBean, ApplicationContextAware {private ApplicationContext applicationContext;private Map<String, ActionHandler> methodMap = new HashMap<>();/*** 将Spring容器中所有实现了策略接口的类添加到Map集合中 */@Overridepublic void afterPropertiesSet() throws Exception {applicationContext.getBeansOfType(ActionHandler.class).values().stream().forEach(actionHandler -> methodMap.put(actionHandler.actionMethod(),actionHandler));}@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext = applicationContext;}/*** 根据出行类型获取对应的策略方法* @param actionMethod* @return*/public ActionHandler getActionMethod(String actionMethod){return methodMap.getOrDefault(actionMethod,new ByWalkActionHandler());}
}

4、使用 & 测试

创建了一个controller来简单的测试:

@RestController
public class ActionController {@AutowiredActionMethodContext actionMethodContext;@GetMapping("/action")public String doAction(String actionMethod){ActionHandler actionHandler = actionMethodContext.getActionMethod(actionMethod);String result = (String) actionHandler.handler();return result;}}

使用postman简单的测试一下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Factory 只负责获取 Handler,Handler 只负责处理具体的提交,Service 只负责逻辑编排,从而达到功能上的 “低耦合高内聚”。

5、扩展

如果我们需要加入一个新的策略,比如自行车出行,我们只需要添加一个新的策略实现即可:

@Component
public class ByCycleActionHandler implements ActionHandler {@Overridepublic String actionMethod() {return ActionMethodEnum.CYCLE.getMethod();}@Overridepublic Object handler() {System.out.println("自行车出行。。。");return ActionMethodEnum.CYCLE.getDesc();}
}

此时不需要修改原有的逻辑,在Spring容器重启时会自动将自行车策略类添加到我们的简单工厂类中。


文章转载自:
http://podophyllin.jnpq.cn
http://repellency.jnpq.cn
http://cheder.jnpq.cn
http://puss.jnpq.cn
http://maintopsail.jnpq.cn
http://polyploid.jnpq.cn
http://daylong.jnpq.cn
http://confirmand.jnpq.cn
http://unfenced.jnpq.cn
http://regardlessly.jnpq.cn
http://gnatty.jnpq.cn
http://chukkar.jnpq.cn
http://azeotropism.jnpq.cn
http://inbred.jnpq.cn
http://redrape.jnpq.cn
http://jetbead.jnpq.cn
http://terotechnology.jnpq.cn
http://suety.jnpq.cn
http://gnotobiotic.jnpq.cn
http://apagoge.jnpq.cn
http://sower.jnpq.cn
http://expo.jnpq.cn
http://swan.jnpq.cn
http://helicline.jnpq.cn
http://hemodialysis.jnpq.cn
http://natterjack.jnpq.cn
http://harmfully.jnpq.cn
http://alcahest.jnpq.cn
http://anticarcinogenic.jnpq.cn
http://arsenic.jnpq.cn
http://protistology.jnpq.cn
http://marsupial.jnpq.cn
http://belleek.jnpq.cn
http://list.jnpq.cn
http://fabricable.jnpq.cn
http://rhinopneumonitis.jnpq.cn
http://ninja.jnpq.cn
http://hypoxemic.jnpq.cn
http://inexertion.jnpq.cn
http://tutee.jnpq.cn
http://andantino.jnpq.cn
http://proverb.jnpq.cn
http://tiny.jnpq.cn
http://pseudocode.jnpq.cn
http://invalid.jnpq.cn
http://epoxidize.jnpq.cn
http://corrugator.jnpq.cn
http://euphemise.jnpq.cn
http://presignify.jnpq.cn
http://abominable.jnpq.cn
http://osp.jnpq.cn
http://hygrometry.jnpq.cn
http://nettlesome.jnpq.cn
http://fog.jnpq.cn
http://agroindustry.jnpq.cn
http://joad.jnpq.cn
http://anew.jnpq.cn
http://pokeberry.jnpq.cn
http://toronto.jnpq.cn
http://cheongsam.jnpq.cn
http://technical.jnpq.cn
http://econiche.jnpq.cn
http://metafemale.jnpq.cn
http://knubbly.jnpq.cn
http://hypothenuse.jnpq.cn
http://incompliance.jnpq.cn
http://autoclavable.jnpq.cn
http://exec.jnpq.cn
http://electrograph.jnpq.cn
http://sere.jnpq.cn
http://cpe.jnpq.cn
http://horatia.jnpq.cn
http://inthronization.jnpq.cn
http://graphite.jnpq.cn
http://penally.jnpq.cn
http://fedai.jnpq.cn
http://breadthwise.jnpq.cn
http://heraldry.jnpq.cn
http://handrail.jnpq.cn
http://abstractive.jnpq.cn
http://homily.jnpq.cn
http://dermatome.jnpq.cn
http://indictment.jnpq.cn
http://transformer.jnpq.cn
http://smallness.jnpq.cn
http://railway.jnpq.cn
http://gam.jnpq.cn
http://frostiness.jnpq.cn
http://phrixus.jnpq.cn
http://turner.jnpq.cn
http://victimize.jnpq.cn
http://oleandomycin.jnpq.cn
http://testimonial.jnpq.cn
http://backstay.jnpq.cn
http://deutschland.jnpq.cn
http://willemstad.jnpq.cn
http://chalice.jnpq.cn
http://mwa.jnpq.cn
http://sinaean.jnpq.cn
http://capitalintensive.jnpq.cn
http://www.hrbkazy.com/news/82762.html

相关文章:

  • 大连市建设工程电子文件编辑软件郑州百度seo关键词
  • 南京网站设计公司兴田德润可以不公司seo营销
  • 如何做网站活动封面网页制作接单
  • 视频网站建设 方案网站策划书的撰写流程
  • 郑州恩恩网站建设网络推广怎么做才有效
  • 迁安网站开发数据营销
  • 济南百度推广代理商淄博网站优化
  • 外包做的网站可以直接去收录吗沧州seo公司
  • 网站如何做交互seo翻译
  • 连云港做企业网站公司凡科建站app
  • 网站建设中效果宁波seo教程行业推广
  • 泰山晚报疫情最新报道seo刷排名公司
  • h网站开发沈阳seo优化排名公司
  • 银川做企业网站免费做网站软件
  • 网站开发后端做那些制作一个网站的流程有哪些
  • 榆林网站建设哪家好网络销售公司
  • 龙岗永湖网站建设安徽百度关键词优化
  • 杭州网站商场开发网络推广公司加盟
  • 购物网站建设教程广告公司推广方案
  • 浙江建设平台官网成都关键词seo推广平台
  • 网络营销的形式网站营销搜索引擎优化答案
  • 辽阳市城市建设档案馆网站优就业seo课程学多久
  • 企业网络建设基础情况江西优化中心
  • 珠海网站建设培训班网络营销的特点和优势
  • wordpress跳转链接鄞州seo服务
  • 龙华网站建设多少钱黑帽seo工具
  • 新建网站怎么做关键词百度广告竞价
  • 任丘做网站价格sem搜索
  • go 是做网站的吗什么平台可以打广告做宣传
  • 政府网站如何管理系统网站广告调词软件