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

策略模式

时间:2019-02-27 13:07:48      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:场景   优点   void   str   ace   strategy   idt   必须   nts   

一、定义:

定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的用户

方法中有大量的if...else...

类型:行为型

 

二、适用场景

系统有很多类,而他们的区别仅仅在于他们的行为的不同

一个系统需要动态地在几种算法(策略)中选择一种

 

三、优点

1、开闭原则

2、避免使用多种条件转移语句if..else

3、提高算法的保密性和安全性

 

四、缺点

1、客户端必须知道所有的策略类,并自行决定使用哪一种策略类

2、产生很大策略类

 

五、策略模式-相关设计模式

1、策略模式和工厂模式(工厂方法、抽象工厂)

工厂模式:创建型设计模式。接受指令,创建符合要求的对象

策略模式:行为型设计模式。接受已经创建好的对象,从而实现不同的行为。

 

2、策略模式和状态模式

策略模式:客户端需要知道选择哪个策略

状态模式:客户端不需要关系具体的状态,这些状态可以自动转换。

 

六、Conding

课程促销行为,促销策略:满减策略,发现促销策略

1、PromotionStrategy 接口

/**
 *  促销策略
 */
public interface PromotionStrategy {
    void doPromotion();
}

  

2、FanXianPromotionStrategy 类

/**
 * 反现策略
 */
public class FanXianPromotionStrategy  implements  PromotionStrategy{
    @Override
    public void doPromotion() {
        System.out.println("反现促销,返回的金额放到余额中。");
    }
}

  

3、LiJianPromotionStrategy类

/**
 * 立减策略
 */
public class LiJianPromotionStrategy implements  PromotionStrategy{
    @Override
    public void doPromotion() {
        System.out.println("立减促销,课程的价格返回配置的价格");
    }
}

  

4、ManJianPromotionStrategy  类

/**
 * 满减策略
 */
public class ManJianPromotionStrategy  implements  PromotionStrategy{
    @Override
    public void doPromotion() {
        System.out.println("满减促销,满200元,减20元");
    }
}

  

5、PromotionActivity 类

/**
 * 促销活动
 */
public class PromotionActivity {

    private  PromotionStrategy promotionStrategy;

    public PromotionActivity(PromotionStrategy promotionStrategy) {
        this.promotionStrategy = promotionStrategy;
    }

    public void execute(){
        this.promotionStrategy.doPromotion();
    }
}

 

6、测试

 

public class Test {
    public static void main(String[] args) {
        PromotionActivity promotionActivity618 = new PromotionActivity(new LiJianPromotionStrategy()) ;

        PromotionActivity promotionActivity1111 = new PromotionActivity(new FanXianPromotionStrategy()) ;
        promotionActivity618.execute();
        promotionActivity1111.execute();
    }
}

  

7、UML图

技术图片

 

策略模式

标签:场景   优点   void   str   ace   strategy   idt   必须   nts   

原文地址:https://www.cnblogs.com/linlf03/p/10442893.html

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