首页 > 编程语言 >java-策略模式

java-策略模式

时间:2023-11-24 09:36:13浏览次数:41  
标签:java 策略 money 模式 calculateBill IBill return public BigDecimal

使用原因:

  需求:同一套系统,使用不同的资源,例如A使用阿里的OSS,B使用腾讯的OSS,使用配置的方式实现动态选择哪个资源

策略模式示例

  做个例子:比如去服装店买衣服,普通会员不打折,黄金会员打9折,铂金会员打8折,钻石会员打7折,这样不同的客户价格计算方式不同,这个时候就可以使用策略模式。


//  一个策略接口
public interface IBill {
	/**
	 * 计算账单
	 * @param money
	 * @return 应付金额
	 */
	BigDecimal calculate(BigDecimal money);
}

  不同的策略实现不同的实现类 

/**
 * @author 
 * @description 普通会员
 * @date 
 */
@Service("RegularType")
public class RegularMember implements IBill{

	@Override
	public BigDecimal calculateBill(BigDecimal money) {

		//10折
		return money.multiply(new BigDecimal(1));
	}
}
/**
 * @author 
 * @description 黄金会员
 * @date 
 */
@Service("GoldType")
public class GoldMember implements IBill{

	@Override
	public BigDecimal calculateBill(BigDecimal money) {
		//9折
		return money.multiply(new BigDecimal(0.9)).setScale(2, RoundingMode.HALF_UP);
	}
}
/**
 * @author 
 * @description 铂金会员
 * @date 
 */
@Service("PlatinumType")
public class PlatinumMember implements IBill{

	@Override
	public BigDecimal calculateBill(BigDecimal money) {
		//8折
		return money.multiply(new BigDecimal(0.8)).setScale(2, RoundingMode.HALF_UP);
	}
}

  测试接口

@RestController
public class IBillStrategyContext {


	@Autowired
	private ApplicationContext applicationContext;

	/**
	 * 计算账单
	 * @param memberType
	 * @param money
	 * @return 应付金额
	 */
	@GetMapping("calculate")
	public BigDecimal calculateBill(@RequestParam("memberType") String memberType,
									@RequestParam("money") BigDecimal money){

		IBill bean = applicationContext.getBean(memberType, IBill.class);
		return bean.calculateBill(money);
	}

}

标签:java,策略,money,模式,calculateBill,IBill,return,public,BigDecimal
From: https://www.cnblogs.com/Xkaixian/p/17852989.html

相关文章

  • Java算法练习—递归/回溯
    递归是一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。因此递归过程,最重要的就是查看能不能将原本的问题分解为更小的子问题,这是使用递归的关键。如果是线型递归,子问题直接回到父问题......
  • Tutorial 19_中介者模式
    实验19:中介者模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解中介者模式的动机,掌握该模式的结构;2、能够利用中介者模式解决实际问题。[实验任务一]:虚拟聊天室在“虚拟聊天室”实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下:1.新的具体聊......
  • Tutorial 20_备忘录模式
    实验20:备忘录模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解备忘录模式的动机,掌握该模式的结构;2、能够利用备忘录模式解决实际问题。[实验任务一]:多次撤销改进课堂上的“用户信息操作撤销”实例,使得系统可以实现多次撤销(可以使用HashMap、ArrayList等集......
  • JavaScript知识点
    类类(class)是在JS中编写构造函数的新方法。它是使用构造函数的语法糖,在底层中使用仍然是原型和基于原型的继承。模板字符串模板字符串是在JS中创建字符串的一种新方法。我们可以通过使用反引号使模板字符串化。对象解构对象析构是从对象或数组中获取或提取值的—种新的、更简洁的......
  • idea的Java窗体可视化工具Swing UI Designer的简单使用(一)
    0、问题总结Warning:java:源值1.5已过时,将在未来所有发行版中删除:   Error:java:Compilationfailed:internaljavacompilererror:   1、窗体的初使用创建GUIForm      注意使用这个关闭模式:  使用jFrame.pack();替换jFrame.setSi......
  • Java8 日期时间
    概念彻底弄懂GMT、UTC、时区和夏令时java中的时间与时区:LocalDateTime和DateUTCpublicstaticInstantjava.time.Instant#now(){returnClock.systemUTC().instant();}UTC(CoodinatedUniversalTime),协调世界时,又称世界统一时间、世界标准时间、国际协调时间。由于英......
  • postman 出现Enable JavaScript and cookies to continue 如何反爬(js反爬)
    网页无法F12,禁止调试出现debug怎么办直接F8禁用,ctrl+F8开启调试断点网站禁止ip访问,并且关闭了icmp回包,调试最好禁用缓存,以便实时更新用postman单独访问首页的index的首页也是无法获取网页内容考虑网页使用js进行跳转实例:比如使用postman请求https://www.phind.com/简......
  • Linux文本模式手动配置静态ip ubuntu改ip
    查看当前系统版本cat/etc/os-release查看当前网卡设备名ipaifcofig-a高版本的ubuntu没有interfaces:vim/etc/netplan/xxxxxxnetwork:ethernets:ens33:#配置的网卡的名称addresses:[192.168.8.9/24]#配置的静态ip地址和掩码dhcp4:false......
  • JavaFx helloworld 坑
    系统LinuxMintIDEA创建的helloworld项目,用IDEA运行就僵住,然而用mvncleanjavafx:run却能成功————在系统terminal能成功,在IDEA的Terminal不行。不过我也是见怪不怪了,上次Jetbrains家的Rider运行Avalonia能出窗口,但是窗口是花的,到Avalonia报了issue,......
  • 移动光猫拨号(路由模式)下的IPV6获取方式
    按图设置即可1、设置拨号连接,获取前缀2、将前缀填写到用户侧的IPV6设置里3、测试ipv6 或者:在哪里获取前缀,前缀在哪里出现的 设置完,等候5分钟,去状态页找前缀信息。......