Java 设计模式 - 策略模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 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();
    }
}

猜你喜欢

转载自blog.csdn.net/R812656252/article/details/83574604