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

用word做网站相关论文百度网盘搜索引擎入口在哪

用word做网站相关论文,百度网盘搜索引擎入口在哪,上海谷歌seo推广公司,saas电商建站系统一、策略模式 1.1策略模式定义 在策略模式#xff08;Strategy Pattern#xff09;中一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式定义了一系列算法或策略#xff0c;并将每个算法封装在独立的类中#xff0c;使得它们可以互相…一、策略模式 1.1策略模式定义 在策略模式Strategy Pattern中一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式定义了一系列算法或策略并将每个算法封装在独立的类中使得它们可以互相替换。通过使用策略模式可以在运行时根据需要选择不同的算法而不需要修改客户端代码。 在策略模式中我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。 1.2 使用场景 1、如果在一个系统里面有许多类它们之间的区别仅在于它们的行为那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2、一个系统需要动态地在几种算法中选择一种。 3、如果一个对象有很多的行为如果不用恰当的模式这些行为就只好使用多重的条件选择语句来实现。 二、工厂模式 2.1工厂模式定义 工厂模式Factory Pattern是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式它提供了一种创建对象的最佳方式。 工厂模式提供了一种将对象的实例化过程封装在工厂类中的方式。通过使用工厂模式可以将对象的创建与使用代码分离提供一种统一的接口来创建不同类型的对象。 在工厂模式中我们在创建对象时不会对客户端暴露创建逻辑并且是通过使用一个共同的接口来指向新创建的对象。 2.2 使用场景 1、日志记录器记录可能记录到本地硬盘、系统事件、远程服务器等用户可以选择记录日志到什么地方。 2、数据库访问当用户不知道最后系统采用哪一类数据库以及数据库可能有变化时。 3、设计一个连接服务器的框架需要三个协议POP3、IMAP、HTTP可以把这三个作为产品类共同实现一个接口。 注意事项作为一种创建类模式在任何需要生成复杂对象的地方都可以使用工厂方法模式。有一点需要注意的地方就是复杂对象适合使用工厂模式而简单对象特别是只需要通过 new 就可以完成创建的对象无需使用工厂模式。如果使用工厂模式就需要引入一个工厂类会增加系统的复杂度。 三、实现 需求为用户在美团上购买物品后的核销业务,根据不同核销完成后的返回结果进行核销限制添加积分等,例如是否是本公司app下的会员,是否添加本公司企微,是否关注本公司公众号来进行对应操作,(后续可能会添加其他核销方式),所以该处可利用策略模式实现,而不是一长串的if..else进行功能的实现,违反了开闭原则(对扩展开放对修改封闭), 3.1 使用if...else实现功能伪代码 过多嵌套,后续扩展功能不利于维护,实现简单 public class StrategyTest {Resourceprivate TbUserDao tbUserDao;Resourceprivate TbActivityDao tbActivityDao;Resourceprivate MtCouponService mtCouponService;Testpublic Object verify (String userId,String receipt_code) {MapString,Object result new HashMap();//1. 获取用户信息TbUser tbUser tbUserDao.selectUserByUserId(userId);if (null tbUser) {return null;}// 根据receipt_code 和 skuId 查询出需要核销的类型// 2. 根据不同的核销类型进行核销String callBackMsg mtCouponService.getCoinByReceiptCode(receipt_code, userId, 杭州);Map callBackMap JSON.parseObject(callBackMsg, Map.class);if (200.equals(callBackMap.get(code))) {//2.1. 判断核销记录增加活动对应参数TbActivity activity new TbActivity();activity.setModifyTime(new Date());if (企微.equals(callBackMap.get(type))) {activity.setActivitySource(企微);activity.setActivityCurrency(tbUser.getUserCurrency() 200);tbActivityDao.insert(activity);result.put(code, 200);result.put(msg, 核销成功);return result;}else if (加入企微群.equals(callBackMap.get(type))) {activity.setActivitySource(加群);activity.setActivityCurrency(tbUser.getUserCurrency() 230);tbActivityDao.insert(activity);result.put(code, 200);result.put(msg, 核销成功);return result;}else if (关注公众号.equals(callBackMap.get(type))) {activity.setActivitySource(关注公众号);activity.setActivityCurrency(tbUser.getUserCurrency() 300);tbActivityDao.insert(activity);result.put(code, 200);result.put(msg, 核销成功);return result;}else if (开通会员.equals(callBackMap.get(type))) {activity.setActivitySource(开通会员);activity.setActivityCurrency(tbUser.getUserCurrency() 400);tbActivityDao.insert(activity);result.put(code, 200);result.put(msg, 核销成功);return result;}}result.put(code, 505);result.put(msg, callBackMap.get(msg));return result;} } 3.2 使用策略模式工厂模式 涉及到实际业务,服务实现直接简化为打印相应核销策略 抽象策略类接口 public interface VerificationService {String verificationName();void verify(); } 实现具体策略服务 Service public class OfficialAccountsServiceImpl implements VerificationService{Overridepublic String verificationName() {return VerificationEnum.OfficialAccounts.getName();}Overridepublic void verify() {System.out.println(公众号核销 );} } Service public class VipVerificationServiceImpl implements VerificationService{Overridepublic String verificationName() {return VerificationEnum.Vip.getName();}Overridepublic void verify() {System.out.println(会员核销 );} } Service public class WeComGroupServiceImpl implements VerificationService{Overridepublic String verificationName() {return VerificationEnum.WeComGroup.getName();}Overridepublic void verify() {System.out.println(企微加群核销 );} }Service public class WeComVerificationServiceImpl implements VerificationService{Overridepublic String verificationName() {return VerificationEnum.WeCom.getName();}Overridepublic void verify() {System.out.println(企微核销 );} } 环境类 /*** 核销枚举类*/ public enum VerificationEnum {WeCom( WeCom),WeComGroup(WeComGroup),OfficialAccounts( OfficialAccounts),Vip(Vip);private String name;VerificationEnum(String name) {this.name name;}public String getName() {return name;}public void setName(String name) {this.name name;} } /*** 初始化,并获取VerificationService所有服务bean*/ Component Slf4j public class StrategyHandler implements InitializingBean, ApplicationContextAware {/*** 存放策略的map,可以理解为策略的注册中心*/Resourceprivate final MapString, VerificationService strategyServiceMap new ConcurrentHashMap(16);/*** spring的上下文*/private ApplicationContext applicationContext;Overridepublic void afterPropertiesSet() {//初始化把所有的策略bean放进ioc,使用的时候获取MapString, VerificationService matchBeans applicationContext.getBeansOfType(VerificationService.class);//策略注入的bean做key,策略实现类做valuematchBeans.forEach((key, value) - {strategyServiceMap.put(value.verificationName(), value);log.info(项目启动时初始化核销策略模式为: key{},value{}, key, value);});}/**** param applicationContext spring的上下文* throws BeansException 获取bean异常*/Overridepublic void setApplicationContext(NotNull(message bean不能为空) ApplicationContext applicationContext) throws BeansException {this.applicationContext applicationContext;}/*** 通过key获取对应的策略实现** param verificationName key 核销名称 (String类型或者整形都行,保持和策略接口一致就行)* return VerificationService 具体的核销服务*/public VerificationService getStrategy(String verificationName) throws RuntimeException{if (null strategyServiceMap.get(verificationName)) {//默认策略throw new RuntimeException(核销策略异常...);}return strategyServiceMap.get(verificationName);}} *初始化项目时直接注册服务,方便调用  调用方便,易扩展,但是实现过程较繁琐, public class StrategyTest {Resourceprivate StrategyHandler strategyHandler;Testpublic void test() {MapString,Object result new HashMap();//1. 获取用户信息TbUser tbUser tbUserDao.selectUserByUserId(userId);if (null tbUser) {return null;}// 根据receipt_code 和 skuId 查询出需要核销的类型// 2. 根据不同的核销类型进行核销String callBackMsg mtCouponService.getCoinByReceiptCode(receipt_code, userId, 杭州);Map callBackMap JSON.parseObject(callBackMsg, Map.class);if (200.equals(callBackMap.get(code))) {//服务实现类里直接实现具体操作strategyHandler.getStrategy(callBackMap.get(type)).verify(); result.put(code, 200);result.put(msg, 核销成功);return result;} result.put(code, 505);result.put(msg, callBackMap.get(msg));return result; } 四 总结 4.1 优点 提高了代码的复用性和可维护性将算法的定义与其具体实现进行解耦。可以在运行时动态替换算法提高了程序的灵活性。符合开闭原则新增算法无需修改现有代码。 4.2 缺点 客户端需要知道所有的策略类并根据具体场景选择合适的策略增加了客户端的复杂度。如果策略类较多会导致类的数量增多增加系统的复杂度。 4.3 适用场景 当一个系统中存在多个类只有它们的行为或算法不同时。当一个类定义了多种行为而这些行为在这个类的操作中以多个条件语句的形式出现可以将相关的条件分支移入它们各自的策略类中以替换这些条件语句。当系统需要动态地在几种算法中选择一种时如根据不同的配置、用户选择或者环境条件等。
http://www.sadfv.cn/news/286223/

相关文章:

  • 群晖ds216j能否做网站贵州网站设计公司
  • 企业电子网站建设wordpress to app
  • 如何做花店网站网站统计如何做
  • 御花园网站建设公司wordpress好用的商城主题
  • 网站网页制作的公免费的行情软件网站不用下载
  • 假网站怎么制作南宁手机建站公司
  • wordpress全站关闭评论找外包公司做网站价钱
  • 网站开发 实习报告电子商务网站制作公司
  • 网站开发的安全性主要考虑哪些泰兴企业网站建设
  • 昆明做网站方案石家庄网站快速备案
  • 亿度网络 网站建设无货源如何开网店
  • 郑州做网站推广哪家好家居设计案例
  • 卖汽车配件怎么做网站网上购物哪个网站最好
  • 服务好的郑州网站建设wordpress灯箱效果
  • 贵阳做网站seo黄冈网站建设公司制作网站
  • 外贸仿牌网站建设点击立即进入正能量网站
  • 方圆网站建设长垣建设银行网站
  • 模板和网站是一体的吗梧州网站设计制作服务至上
  • 沈阳网站建设定制wordpress打包成app
  • 网站短期就业培训班怎么做vip视频网站
  • 做网站的背景怎么做公司网站建设公
  • 给一个网站风格做定义广州专业展台制作价格
  • 网站主页 优帮云桂林象鼻山的由来
  • 网站如何建设推广微信分销网站建设官网
  • 武强网站建设WordPress微博图片
  • 专门做电子书的网站邢台做网站咨询
  • 微信支付 企业网站甘肃手机版建站系统价格
  • 什么网站可以做数据调查问卷嵌入式软件开发面试问题
  • 网站推广策划包含的内容电子商务网站规划流程
  • 黄岩区建设规划局网站国际贸易网登录