Java设计模式之Strategy模式
作者:hebedich 发布时间:2023-11-21 03:58:22
标签:Java,设计模式,Strategy模式
基于有了OO的基础后,开始认真学习设计模式!设计模式是java设计中必不可少的!
Apple.java
package strategy;
/**
*
* @author Andy
*
*/
public class Apple implements Discountable {
//重量
private double weight;
//单价 实际开发中 设计金钱等精确计算都是BigDecimal;
private double price;
//按购买量打折
// private Discountor d = new AppleWeightDiscountor();
//按购买总价打折
private Discountor d = new ApplePriceDiscountor();
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Apple (double weight,double price ){
super();
this.weight=weight;
this.price=price;
}
@Override
public void discountSell() {
d.discount(this);
}
}
Banana.java
package strategy;
/**
*
* @author Andy
*
*/
public class Banana implements Discountable {
//重量
private double weight;
////单价 实际开发中 涉及金钱等精确计算都是用BigDecimal
private double price;
public Banana(double weight, double price) {
super();
this.weight = weight;
this.price = price;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public void discountSell() {
//打折算法
if(weight < 5) {
System.out.println("Banana未打折价钱: " + weight * price);
}else if(weight >= 5 && weight < 10) {
System.out.println("Banana打八八折价钱: " + weight * price * 0.88 );
}else if(weight >= 10) {
System.out.println("Banana打五折价钱: " + weight * price * 0.5 );
}
}
}
Market.java
package strategy;
/**
*
* @author Andy
*
*/
public class Market {
/**
* 对可打折的一类事物进行打折
* @param apple
*/
public static void discountSell(Discountable d) {
d.discountSell();
}
}
Discountable.java
package strategy;
/**
*
* @author Andy
*
*/
public interface Discountable {
public void discountSell();
}
Test.java
package strategy;
/**
*
* @author Andy
*
*/
public class Test {
/**
*
* @param args
*/
public static void main(String[] args) {
// 只能对苹果打折 还不能对通用的一类事物打折 而且都是要卖什么就写什么打折算法
// 其实每类事物打折算法又是不一致的
Discountable d = new Apple(10.3, 3.6);
Discountable d1= new Banana(5.4,1.1);
Market.discountSell(d);
Market.discountSell(d1);
}
}


猜你喜欢
- 我这里有一个需求需要修改Person类中的一个属性上的注解的值进行修改,例如:public class Person { private i
- 当目标数据库不能直连的,需要一个服务器作为中间跳板的时候,我们需要通过SSH通道连接数据库。ps:使用ssh连接,相当于本地开了个端口去连接
- 某些情况下我们可能需要与Mysql或者Oracle数据库进行数据交互,有些朋友的第一反应就是直接在Android中加载驱动然后进行数据的增删
- 本文实例为大家分享了Android Studio实现智能聊天的具体代码,供大家参考,具体内容如下1、布局activit_main.xml&l
- 初级技巧 - 乐观锁乐观锁适合这样的场景:读不会冲突,写会冲突。同时读的频率远大于写。以下面的代码为例,悲观锁的实现:public Obje
- PathVariable 映射 URL 绑定的占位符带占位符的 URL 是 Spring3.0 新增的功能,该功能在SpringMVC 向
- 在windows环境下进行的测试,前提条件,windows上需要先安装openssl。配置环境变量,查看版本:import java.io.
- 目录无SpringMVC全局异常时的流程图SpringMVC全局异常流程图其实是一个ModelAndView对象配置文件applicatio
- 首先在layout布局中设置按钮和一个ImageView<Button android:id="@+id/sel
- 崩溃来源使用过AIDL进行跨进程通信的同学,肯定遇到过DeadObjectException这个崩溃,那么这个崩溃是怎么来的,我们又该如何解
- 具体效果如下图所示:方法一方法二产生这种问题的原因是因为moudles.xml中没有找到对应的moudle。加入对应的moudle即可,修改
- 协程属于Kotlin中非常有特色的一项技术,因为大部分编程语言中是没有协程这个概念的。那么什么是协程呢?它其实和线程有点相似,可以简单地将它
- java * 的方法总结AOP的拦截功能是由java中的 * 来实现的。说白了,就是在目标类的基础上增加切面逻辑,生成增强的目标类(该
- ConvexBottomBar是一个底部导航栏组件,用于展现凸起的TAB效果,支持多种内置样式与动画交互。你可以在https://appba
- 本教程将介绍如何在 Spring Boot 应用程序中使用 Kafka。Kafka 是一个分布式的发布-订阅消息系统,它可以处理大量数据并提
- 业务需要动态给图片增加文字(书本的封面图片),修改字体大小、字体、颜色、控制位置测试代码:string path = @"E:\c
- 简介散列函数(英语:Hash function)又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数
- 代码:package com.lwj.test.proxy;import java.lang.reflect.InvocationHandl
- 本文实例讲述了C#滚动字幕的实现方法,分享给大家供大家参考。具体方法如下:在c#中其实滚动屏幕的实现其实很简单,只需要用到Graphics.
- 前言本篇文章将教你作为一个.NET程序员如何快入门Spring Boot。你不需要用Eclipse,也不需要用IDEA。已经习惯了VS,其他