码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式 - 策略模式

时间:2019-12-30 19:03:19      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:图片   ref   策略   算法   void   img   color   拓展   exti   

策略模式

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

技术图片

 

 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

设计模式 - 策略模式

标签:图片   ref   策略   算法   void   img   color   拓展   exti   

原文地址:https://www.cnblogs.com/lankerenf3039/p/12121080.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!