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

响应式网站建设一般多少钱盐城网络

响应式网站建设一般多少钱,盐城网络,PHP网站开发成功案例,海外推广品牌首先,定义接口或抽象父类。例如,定义一个Strategy接口,里面有execute方法。然后不同的策略类实现这个接口,比如ConcreteStrategyA、ConcreteStrategyB等,每个类用Component注解,可能指定Bean的名字&#xf…

首先,定义接口或抽象父类。例如,定义一个Strategy接口,里面有execute方法。然后不同的策略类实现这个接口,比如ConcreteStrategyA、ConcreteStrategyB等,每个类用@Component注解,可能指定Bean的名字,或者用默认的类名首字母小写作为Bean名称。

然后,需要将这些Bean自动注入到一个Map中。Spring支持将同一类型的Bean注入到Map中,其中键是Bean的名称,值是对应的实例。例如,在某个服务类中,使用@Autowired private Map<String, Strategy> strategies; 这样,Spring会自动将所有的Strategy实现类放入这个Map,键是Bean的名称。

接下来,当需要执行某个策略时,根据传入的key(即Bean的名称)从Map中获取对应的实例,调用其execute方法。例如,在服务类中有一个方法,接收策略名称作为参数,然后调用strategies.get(name).execute()。

在Spring框架中,使用策略模式并结合依赖注入可以通过以下步骤实现将子类实例存入Map,并通过指定名称执行对应方法:

1. 定义策略接口或抽象类

public interface PaymentStrategy {void processPayment(double amount);
}

2. 实现具体策略类(子类)

使用@Component并为每个策略指定唯一的Bean名称:

@Component("creditCard")
public class CreditCardPayment implements PaymentStrategy {@Overridepublic void processPayment(double amount) {System.out.println("使用信用卡支付:" + amount);}
}@Component("alipay")
public class AlipayPayment implements PaymentStrategy {@Overridepublic void processPayment(double amount) {System.out.println("使用支付宝支付:" + amount);}
}

3. 注入策略Map并执行

@Service
public class PaymentService {private final Map<String, PaymentStrategy> strategies;// 通过构造器注入,Key为Bean名称,Value为实例@Autowiredpublic PaymentService(Map<String, PaymentStrategy> strategyMap) {this.strategies = strategyMap;}public void executePayment(String method, double amount) {PaymentStrategy strategy = strategies.get(method);if (strategy == null) {throw new IllegalArgumentException("无此支付方式: " + method);}strategy.processPayment(amount);}
}

4. 使用示例

@RestController
public class PaymentController {@Autowiredprivate PaymentService paymentService;@PostMapping("/pay")public String pay(@RequestParam String method, @RequestParam double amount) {paymentService.executePayment(method, amount);return "支付成功";}
}

关键点说明

  • 自动注入Map:Spring会自动将相同类型(PaymentStrategy)的Bean注入到Map中,Key为Bean名称,Value为实例。
  • 策略扩展:新增支付方式只需添加实现类并用@Component("新名称")标记,无需修改其他代码。
  • 异常处理:当传入不存在的Key时,需处理策略未找到的情况(如抛出异常或返回默认策略)。

自定义Map键名(可选)

若需使用非Bean名称的Key,可通过自定义注解实现:

定义注解

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface PaymentType {String value();
}

应用注解到策略类

@Component
@PaymentType("credit")
public class CreditCardPayment implements PaymentStrategy { ... }

手动构建策略Map

@Service
public class PaymentService {private final Map<String, PaymentStrategy> strategies = new HashMap<>();@Autowiredpublic PaymentService(List<PaymentStrategy> strategyList) {for (PaymentStrategy strategy : strategyList) {PaymentType annotation = strategy.getClass().getAnnotation(PaymentType.class);if (annotation != null) {strategies.put(annotation.value(), strategy);}}}// 其他代码不变
}

这种方法允许更灵活地定义策略名称,同时保持代码的可扩展性。

@sercice(“queryability”)

public class QueryAbilityService implement Strategy{…}

private Map<String, Strategy> strategy;

strategy.get(“key”).ifPresent(handler->handler.onmessage(input));


文章转载自:

http://JFY1S92l.Lbrrn.cn
http://Xzb5VOtZ.Lbrrn.cn
http://v7OX9IPs.Lbrrn.cn
http://y2jIx7w4.Lbrrn.cn
http://hCEWlRuP.Lbrrn.cn
http://jKeYbuyy.Lbrrn.cn
http://GoIsWi7g.Lbrrn.cn
http://VLNFF5Sx.Lbrrn.cn
http://P9yM55PB.Lbrrn.cn
http://PunIOXkK.Lbrrn.cn
http://ZazRD1Wa.Lbrrn.cn
http://t2BfHw22.Lbrrn.cn
http://q3sv4PQY.Lbrrn.cn
http://t9WfovPn.Lbrrn.cn
http://iWbvczke.Lbrrn.cn
http://Jp1awI15.Lbrrn.cn
http://NXeIBts3.Lbrrn.cn
http://i6QV4jBZ.Lbrrn.cn
http://QfrMWP4a.Lbrrn.cn
http://BgZZkArn.Lbrrn.cn
http://uIuHn0US.Lbrrn.cn
http://OxWEMrKQ.Lbrrn.cn
http://qNJHGJqL.Lbrrn.cn
http://48Rx7MkC.Lbrrn.cn
http://BuPV9CiE.Lbrrn.cn
http://7mWnHBqe.Lbrrn.cn
http://avs2guP2.Lbrrn.cn
http://0RmXqCfA.Lbrrn.cn
http://AupirvgN.Lbrrn.cn
http://XnvhdxbY.Lbrrn.cn
http://www.dtcms.com/wzjs/697618.html

相关文章:

  • 哈尔滨网站建设学校查看wordpress管理员
  • 帮人做网站在徐州被敲诈五万如何自己做网站建设
  • 重庆制作网站公司哪家好网站空间要多大
  • 怎么在网站中搜索关键字工业设计公司排行
  • 网站的空间品牌推广案例
  • 常州孟河镇建设工程交易网站东莞做网站 9353
  • 电子商务网站是电子商务企业wordpress 同步文章
  • 宝安区建设网站郑州网站建设优化
  • 汕头市建设局网站代理公司注册企业
  • 做租车行网站做公司网站需要多少钱
  • 中山网站建设 760江苏双楼建设集团有限公司网站
  • 网站流量统计平台进行seo网站建设
  • 电子商城网站建设公司石家庄划定6个高风险区
  • 企业网站应该怎么做做企业推广去哪个网站比较好
  • 找加工厂上什么网站wordpress卸载
  • 建行国际互联网网站divider wordpress
  • 专业做室内设计的网站有哪些河南省人事考试网
  • 网站功能型和展示型的区别wordpress新添接口
  • 手机网站被做跳转4s店网站建设计划
  • 开源网站建设工具信用宁波企业网查询
  • seo织梦网站建设步骤wordpress增加目录
  • 外贸 推广网站中国网站为什么做的那么丑
  • seo发帖网站橙光音乐一家做音乐的网站
  • php二次网站开发步骤电影视频网站建设费用
  • 网站注册理由手机网站用什么系统
  • 权威的合肥网站推广重庆交通大学官网网站
  • 网站数据库连接出错网站配色表
  • 邯郸网站建设最新报价企业网站seo 优帮云
  • 自己怎么做卡密网站c语言在线编程网站
  • 博客网站品牌推广全案