版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/R812656252/article/details/83574604
策略模式
定义一系列的算法,把他们一个一个封装起来, 是他们可以相互替换. 于是利用策略模式可以完成独立于调用者而变化.
UML图示
将实际算法封装成一个一个的类,并让这些类继承同一个接口. 在调用者中声明这个对象的引用, 同时在使用时根据具体情况, 选择不同实现类完成对该引用的实现.
策略模式举例
- FirmAccountEnrichmentDelegate.java
public interface FirmAccountEnrichmentDelegate {
public String getFirmAccount(Trade trade);
}
- BondFirmAccountEnrichmentDelegate.java
public class BondFirmAccountEnrichmentDelegate implements FirmAccountEnrichmentDelegate {
@Override
public String getFirmAccount(Trade trade) {
return "Yards";
}
}
- SwapFirmAccountEnrichmentDelegate.java
public class SwapFirmAccountEnrichmentDelegate implements FirmAccountEnrichmentDelegate {
@Override
public String getFirmAccount(Trade trade) {
return "SMS2";
}
}
- TradeEnrichment.java
public class TradeEnrichment {
private Trade trade;
private FirmAccountEnrichmentDelegate firmAccountEnrichmentDelegate;
public TradeEnrichment(Trade trade){
this.trade = trade;
}
public void enrichTrade(){
if(trade.getTradeType().trim().equals("Bond")){
firmAccountEnrichmentDelegate = new BondFirmAccountEnrichmentDelegate();
}else{
firmAccountEnrichmentDelegate = new SwapFirmAccountEnrichmentDelegate();
}
trade.setFirmAccount(firmAccountEnrichmentDelegate.getFirmAccount(trade));
System.out.println("Trade is "+trade);
}
}
- Trade.java
public class Trade {
private String tradeType;
private String firmAccount;
public String getTradeType() {
return tradeType;
}
public void setTradeType(String tradeType) {
this.tradeType = tradeType;
}
public String getFirmAccount() {
return firmAccount;
}
public void setFirmAccount(String firmAccount) {
this.firmAccount = firmAccount;
}
@Override
public String toString() {
return "Trade{" +
"tradeType='" + tradeType + '\'' +
", firmAccount='" + firmAccount + '\'' +
'}';
}
}
- Starter.java
public class Starter {
public static void main(String[] args){
Trade trade1 = new Trade();
trade1.setTradeType("Bond");
TradeEnrichment tradeEnrichment1 = new TradeEnrichment(trade1);
tradeEnrichment1.enrichTrade();
Trade trade2 = new Trade();
trade2.setTradeType("Swap");
TradeEnrichment tradeEnrichment2 = new TradeEnrichment(trade2);
tradeEnrichment2.enrichTrade();
}
}