策略模式学习

Dcatfly 2019-06-27

策略模式UML:
策略模式学习

ContextType1、ContextType2在构造方法或set方法中初始化各自需要的StrategyType

策略模式代码

/**
 * 策略接口
 */
public interface Strategy {
    
    public void strategyInterfaceMethod();
}
/**
 * 具体策略A
 */
public class StrategyTypeA implements Strategy {
    @Override
    public void strategyInterfaceMethod() {
        // todo someting
    }
}
/**
 * 具体策略B
 */
public class StrategyTypeB implements Strategy {
    @Override
    public void strategyInterfaceMethod() {
        // todo someting
    }
}

/**
 * 上下文抽象类
 * 我理解的这个类的作用是:负责策略与用户(使用者)的连接,也是策略模式的入口
 */
public AbstractClass Context {
    //持有一个具体策略的对象
    private Strategy strategy;
    /**
     * 构造函数,传入一个具体策略对象
     * @param strategy
     */
    public Context(Strategy strategy){
        this.strategy = strategy;
    }
    /**
     * 策略方法
     */
    public void contextMethod(){
        strategy.strategyInterfaceMethod();
    }
}

/**
 * 具体环境类
 */
public Class ContextType1 extends Context{
    public void contextMethod(){
        strategy.strategyInterfaceMethod();
        // todo something
    }
}

应用场景: 多个用户购买不同型号电脑

public class Client {
    public static void main(String[] args) {
        // 客户需要定制自己需要的策略
        // 策略1--购买戴尔电脑
        Strategy dell = new StrategyTypeA();
        dell.setCPU("AMD");
        dell.setScreen("LGD");
        
        // 策略2
        Strategy macbook = new StrategyTypeB();
        macbook.setCPU("Intel");
        macbook.setScreen("sansung");

        // 购买的是dell电脑
        // 用户将自己需要的策略(电脑配置)交给商家
        ContextType1 customer1 = new ContextType1(dell);
        // buyComputer方法中的strategy.strategyInterfaceMethod(); = StrategyTypeA.strategyInterfaceMethod();
        customer1.buyComputer();

        // 购买的是macbook
        ContextType2 customer2 = new ContextType2(macbook);  
        // buyComputer方法中的strategy.strategyInterfaceMethod(); = StrategyTypeB.strategyInterfaceMethod();      
        customer2.buyComputer();
    }
}

相关推荐