设计模式 - 策略模式

Posted lankerenf3039

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式 - 策略模式相关的知识,希望对你有一定的参考价值。

策略模式

做一件事,采用不同的策略。

技术图片

 

 context上下文

技术图片
public class Context {
    
    Strategy strategy;
    
    public Context(Strategy strategy) {
        this.strategy = strategy;
    }
    
    //上下文接口
    public void contextInterface() {
        strategy.algorithmInterface();
    }

}
View Code

Strategy抽象策略

技术图片
public abstract class Strategy {     
     //算法方法
     public abstract void algorithmInterface();
 
 }
View Code

ConcreteStrategy具体策略实现

技术图片
public class ConcreteStrategyA extends Strategy {

    @Override
    public void algorithmInterface() {
        System.out.println("算法A实现");
    }

}
View Code

Client客户端(用同一个上下文加载不同的策略,得到不同的策略实现结果)

技术图片
public class Client {
    
    public static void main(String[] args) {
        Context context;
        
        context = new Context(new ConcreteStrategyA());
        context.contextInterface();
        
        context = new Context(new ConcreteStrategyB());
        context.contextInterface();
        
        context = new Context(new ConcreteStrategyC());
        context.contextInterface();
    }

}
View Code

优点:避免if/else,添加策略只需添加新的策略实现类,策略可以自由切换,拓展性好。

缺点:所有策略实现类都需要对外(客户端)暴露。

和工厂模式的区别

工厂模式侧重与类的创建,策略模式侧重于策略的执行结果。

------

参考:

https://www.cnblogs.com/adamjwh/p/11011095.html

以上是关于设计模式 - 策略模式的主要内容,如果未能解决你的问题,请参考以下文章

Redis实现分布式锁(设计模式应用实战)

设计模式策略模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

代码片-策略模式+工厂模式

代码片-策略模式+工厂模式

代码片-策略模式+工厂模式

代码片-策略模式+工厂模式