设计模式之策略模式学习

什么是策略模式

	策略模式是一种行为模式。它对一系列的算法加以封装,为所有算法定义一个抽象的算法接口,并通过继承该抽象算法接口对所有的算法加以封装和实现,具体的算法选择交由客户端决定(策略)。策略模式主要用来平滑的处理算法的切换。

策略模式的角色和职责

Strategy(策略):
		策略(算法)的抽象。	
ConcreteStrategy(具体策略):
			各种具体的算法(策略)的实现。

Context(容器类):
策略的外部封装类,或者说策略的容器类。根据不同策略执行不同的行为。策略由外部环境决定。

策略模式的优点、缺点

一、优点
1.策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了一个算法或行为族。恰当使用继承可以把公共的代码移到父类里面,从而避免重复的代码。
2.策略模式提供了可以替换继承关系的办法。
3.使用策略模式可以避免使用多重条件转移语句。
二、缺点
1. 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
2. 策略模式会造成很多的策略类。有时候可以通过把依赖于环境的状态保存到客户端里面,而将策略类设计成可以共享的,这样策略类实例可以被不同客户端使用。换言之,可以使用享元模式来减少对象的数量。

策略模式的实现

策略模式的实现代码很简单,只需要一个策略抽象类,两个具体策略,一个用来封装策略的容器类。
就以商城打折为例,
一个策略为满500打七折。
一个策略为满200打八折。
策略抽象类

public interface Strategy {
    //打折策略方法
    public double discount(double num);
}

具体策略类

public class DiscountA implements Strategy{
    //实现打八折的算法
    @Override
    public double discount(double num) {
        return  num * 0.8;
    }
}
public class DiscountB implements Strategy{
 //实现打七折的算法
    @Override
    public double discount(double num) {
        return num * 0.7;
    }
}

容器类

public class Context  {
    private  Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    //由容器调用策略
    public double discount(double num){
        return this.strategy.discount(num);
    }


}

测试类

public class MainClass {
    public static void main(String[] args) {
        double  num = 500;
        //选择哪种策略,是外部决定的。
        Context context = new Context(new DiscountA());
        double  newnum = context.discount(num);
        System.out.println("实际支付"+newnum+"元");


    }
}

运行结果:
在这里插入图片描述
到这里策略模式的代码实现就完成了,哈哈哈!

单个策略模式觉得蛮简单的,但要是结合工厂模式、享元模式感觉还是不会,但先记下吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值