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

大话设计模式之策略模式

时间:2018-05-06 21:21:34      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:algorithm   tin   bre   class   参数   ring   test   info   分享   

背景:

商场促销期间,可能会出现8折、5折的促销活动,也可能出现满100减10、满200减30的促销活动,设计一个收银系统。

策略模式:定义了算法家族,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户。

UML类图:

技术分享图片

Demo:

算法接口Strategy:

1 public interface Strategy {
2 
3     void algorithmInterface();
4 }

具体算法ConcreteStrategyA:

1 public class ConcreteStrategyA implements Strategy {
2     @Override
3     public void algorithmInterface() {
4         System.out.println("算法A实现");
5     }
6 }

具体算法ConcreteStrategyB:

1 public class ConcreteStrategyB implements  Strategy {
2     @Override
3     public void algorithmInterface() {
4         System.out.println("算法B实现");
5     }
6 }

Context上下文类:

 1 public class Context {
 2 
 3     private Strategy stagtegy;
 4 
 5     public Context(String algorithm) {
 6         switch (algorithm){
 7             case "A":stagtegy = new ConcreteStrategyA();break;
 8             case "B":stagtegy = new ConcreteStrategyB();break;
 9             default:break;
10         }
11     }
12 
13     public void contextInterface(){
14         stagtegy.algorithmInterface();
15     }
16 }

测试类:

1 public class Main {
2 
3     public static void main(String[] args) {
4         Context context = new Context("A");
5         context.contextInterface();
6     }
7 }

总结:

策略模式在平时开发中比较常用,使用场景是:一个接口或抽象类有一组具体的实现,使用时使用接口或抽象类中的抽象方法,这样可根据传入的不同实例实现不同的策略。比如可以将上述的Strategy当成参数传递给一个方法。

大话设计模式之策略模式

标签:algorithm   tin   bre   class   参数   ring   test   info   分享   

原文地址:https://www.cnblogs.com/xiaosiyuan/p/8999549.html

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