标签:策略 int money void 模式 Discount products 设计模式 public
以网上购物一下单为例子,网店很多时候为促销,往往会推出一些优惠活动,如满200减100、首次购头20等。
面对这种需求,可通过选择策略类,来执行不同算法分支。核心是通过注入对象,改变行为。
- 将每一种优惠策略,单独成一个组件对象,独立出来
- 使用方通过选择不同的组件,达到不同的行为
PS: 此模式其实就是spring IOC思想
//建立优惠类接口
public interface Discount {
public int calculate(int money);
}
//分别创建满减、首次优惠、第二单优惠
public class FullDiscount implements Discount {
@Override
public int calculate(int money) {
if (money >= 200) {
System.out.println("满200减100");
}
return money;
}
}
public class NewerDiscount implements Discount {
@Override
public int calculate(int money) {
return money - 20;
}
}
public class SecondDiscount implements Discount {
@Override
public int calculate(int money) {
return money;
}
}
//在购物车中注入优惠类
public abstract class ShoppingCart {
private Discount discount; //注入
private List<Object> products; //商品列表
public ShoppingCart(List<Object> products) {
this.products = products;
}
public void setDiscount(Discount discount) {
this.discount = discount;
}
/**
* 提交订单
*/
public void submitOrder() {
//计算金额
int money = balance();
//支付
pay(money);
//发货
send();
}
//计算金额
private int balance() {
return discount.calculate(100);
}
//发货
private void send() {
System.out.println("顺丰包邮");
}
//支付方式
protected abstract void pay(int money);
}
public class CashShopping extends ShoppingCart {
public CashShopping(List<Object> products) {
super(products);
}
@Override
protected void pay(int money) {
System.out.println("现金支付");
}
}
//策略模式测试
public class ShoppingCartClient {
public static void main(String[] args) {
//添加商品进购物车
ArrayList<Object> list = new ArrayList<>();
//使用现金进行结算
CashShopping cashShopping = new CashShopping(list);
cashShopping.setDiscount(new NewerDiscount()); //注入优惠类
cashShopping.submitOrder();
}
}
拾荒路上的开拓者 发布了120 篇原创文章 · 获赞 19 · 访问量 2万+ 私信 关注
标签:策略,int,money,void,模式,Discount,products,设计模式,public 来源: https://blog.csdn.net/LINBE_blazers/article/details/104193817
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。