博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
策略模式
阅读量:6968 次
发布时间:2019-06-27

本文共 1657 字,大约阅读时间需要 5 分钟。

定义:策略模式的基本含义是针对一组算法或行为特性,将他们抽象到具有共同接口函数的独立抽象类或接口中,从而使得他们可以相互替换。这样就使得某一个特定的接口行为可以在不影响客户端的情况下发生变化。
策略模式不能严格称之为一种设计模式,因为它仅仅是一个接口的多个实现在运行期的选择性特换而已。
策略模式所涉及的主要角色:
环境角色:持有一个Strategy类的引用,将决定调用哪种Strategy角色完成业务逻辑
抽象策略角色:这是一个抽象的策略角色,由一个借口或抽象类来扮演这个角色。这个角色是策略模式的核心,他是所有策略算法的核心归纳,因而对外表现为一个一直的接口函数
具体策略角色:封装了具体的策略算法或行为。
策略模式的核心是算法的包装,其最终目的是把使用算法的责任(环境)和算法的实现进行解耦、由于环境和算法的独立,算法的增加,减少或者修改都不会影响到环境和客户端的调用,当出现新的算法或者现有算法的实现发生变化时,我们只需要改变具体的策略类,并在客户端调用的地方进行注册即可。在这种情况下,策略模式中的算法实现都是可插拔的。
应用场景:对于某只能够业务可能存在多种不同的算法实现,eg:电子商务中计算总价有折扣和无折扣的场景。
策略模式可以带来的好处;
策略模式提供了管理一组算法组的方法:通过接口和多个算法实现之间的契约接口来完成业务场景
策略模式提供了可以替换通过集成进行对象行为扩展的方法:使用公共抽象接口的不同实现类而非一个抽象类的继承链完成行为的扩展
策略模式提供了将短发的调用责任与算法逻辑进行解耦的方法:通过角色转移,将调用环境角色与算法抽象之间分开形成引用关系。
 
package com.slp.Strategy;public interface PriceCalculationStrategy {public double calculatePrice();}

  

package com.slp.Strategy;public class NoDiscountPriceCalculationStrategy implements		PriceCalculationStrategy {	private double price;	private double copies;	public NoDiscountPriceCalculationStrategy(double price, double copies) {		this.price = price;		this.copies = copies;	}		public double calculatePrice() {				return price * copies;	}}

  

package com.slp.Strategy;public class PercentageDiscountPriceCalculationStrategy implements		PriceCalculationStrategy {	private double price;	private double copies;	private double rate;	public PercentageDiscountPriceCalculationStrategy(double price,			double copies, double rate) {		super();		this.price = price;		this.copies = copies;		this.rate = rate;	}	public double calculatePrice() {		// TODO Auto-generated method stub		return price * copies * rate;	}}

  

 

转载于:https://www.cnblogs.com/dream-to-pku/p/5565833.html

你可能感兴趣的文章
Shell命令-文件及内容处理之diff、vimdiff
查看>>
思维导图绘制六部曲
查看>>
Linux概述
查看>>
微信之父”张小龙牛在哪里?
查看>>
安装Proxmox
查看>>
PDF如何添加注释
查看>>
Nginx负载均衡
查看>>
Linux基础知识——grep命令、正则表达式
查看>>
nginx安装_SSL
查看>>
我的友情链接
查看>>
ubuntu 常用软件包管理命令
查看>>
Neutron 物理部署方案 - 每天5分钟玩转 OpenStack(68)
查看>>
程序员应该遵守的编程原则
查看>>
利用bloom filter算法处理大规模数据过滤
查看>>
PHP9个有用的功能或者函数
查看>>
MySQL查询本周、上周、本月、上个月份数据的sql代码
查看>>
一点感想
查看>>
Ajax异步传输
查看>>
云计算之OpenStack实战记(一)与踩坑
查看>>
linux下日常较频繁需要操作的文件
查看>>