java实现策略模式

创建策略接口

public interface Calculate {

    public int operation(int a, int b);

}

实现接口

加法策略

@Component
public class AddCalculate implements Calculate {
    @Override
    public int operation(int a, int b) {
        return a + a;
    }
}

减法策略

@Component
public class SubCalculate implements Calculate {
    @Override
    public int operation(int a, int b) {
        return a - a;
    }
}

策略实现类

在springboot中,对于添加了 @Autowired 的map会自动将实现类注入到map中,key是beanid,value是注入的对象实例

@Component
public class CalculateFactory {

    @Autowired
    private Map<String, Calculate> calculateMap;

    public int calculate(String calculate, int a, int b) throws Exception {
        return Optional.ofNullable(calculateMap.get(calculate))
                .orElseThrow(() -> new RuntimeException("异常")).operation(a, b);
    }

}

使用

@RestController
@RequestMapping("/demo")
public class DemoController {

    @Autowired
    private CalculateFactory calculateFactory;

    @GetMapping("/calculate")
    public int calculate() throws Exception {
        return calculateFactory.calculate("addCalculate", 1, 1);
    }

}

策略模式是一种行为型设计模式,它允许在运行时根据需要更改算法或策略。在策略模式中,我们将算法封装在独立的类中,使它们可以互换。 下面是一个用Java实现策略模式的简单例子: 首先,我们定义一个接口`PaymentStrategy`,它包含一个`pay`方法,该方法将被不同的支付策略实现: ```java public interface PaymentStrategy { void pay(double amount); } ``` 然后,我们实现两个具体的支付策略,一个是信用卡支付策略,另一个是支付宝支付策略。这两个类都实现了`PaymentStrategy`接口: ```java public class CreditCardPayment implements PaymentStrategy { private String name; private String cardNumber; private String cvv; private String expiryDate; public CreditCardPayment(String name, String cardNumber, String cvv, String expiryDate) { this.name = name; this.cardNumber = cardNumber; this.cvv = cvv; this.expiryDate = expiryDate; } @Override public void pay(double amount) { System.out.println(amount + " paid with credit/debit card"); } } public class AlipayPayment implements PaymentStrategy { private String email; private String password; public AlipayPayment(String email, String password) { this.email = email; this.password = password; } @Override public void pay(double amount) { System.out.println(amount + " paid with Alipay"); } } ``` 最后,我们定义一个`PaymentContext`类,该类包含一个`PaymentStrategy`实例,它将用于支付。`PaymentContext`类还包含一个`pay`方法,该方法将调用当前的支付策略的`pay`方法: ```java public class PaymentContext { private PaymentStrategy paymentStrategy; public PaymentContext(PaymentStrategy paymentStrategy) { this.paymentStrategy = paymentStrategy; } public void pay(double amount) { paymentStrategy.pay(amount); } } ``` 现在,我们可以使用这些类来模拟不同的支付场景。例如,我们可以使用信用卡支付: ```java PaymentStrategy creditCardPayment = new CreditCardPayment("John Doe", "1234567890123456", "123", "12/22"); PaymentContext paymentContext = new PaymentContext(creditCardPayment); paymentContext.pay(100); ``` 或者,我们可以使用支付宝支付: ```java PaymentStrategy alipayPayment = new AlipayPayment("example@example.com", "password"); PaymentContext paymentContext = new PaymentContext(alipayPayment); paymentContext.pay(200); ``` 这样,我们就可以在运行时根据需要更改支付策略,而不必修改现有的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值