设计一个网上书店,该系统中所有的计算机类图书(ComputerBook)每本都有10%的折扣,所有的语言类图书(LanguageBook)每本都有2元的折扣,小说类图书(NovelBook)每100元

简介: 该博客文章通过策略模式设计了一个网上书店系统,其中不同类型的图书(计算机类、语言类、小说类)应用不同的折扣策略,并通过Java代码示例展示了如何实现和应用这些策略来计算图书的折扣价格。

设计一个网上书店,该系统中所有的计算机类图书(ComputerBook)每本都有10%的折扣,所有的语言类图书(LanguageBook)每本都有2元的折扣,小说类图书(NovelBook)每100元

现使用策略模式来设计该系统,绘制类图并编程实现

UML类图
在这里插入图片描述
书籍

package com.zheng;

public class Book {
    private double price;// 价格
    private Discount discount;// 维持一个对抽象折扣类的引用

    // 调用折扣类的折扣计算方法
    public double getPrice() {
        return discount.calculate(this.price);
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public void setDiscout(Discount discount) {
        this.discount = discount;
    }

}

调用不同价格的接口

package com.zheng;

public interface Discount {

    public double calculate(double price);//计算价格

}

具体实现折扣

package com.zheng;

public class ComputerBook implements Discount {

    private final double DISCOUNT=0.9;//购买计算机类书籍90%的折扣

    @Override
    public double calculate(double price) {
        System.out.println("计算机类书籍");
        return price*DISCOUNT;
    }

}

package com.zheng;

public class LanguageBook implements Discount {
    private final double DISCOUNT=2;

    @Override
    public double calculate(double price) {
        System.out.println("语言类书籍");
        return price-DISCOUNT;
    }

}

package com.zheng;

public class NovelBook implements Discount {
    private final double DISCOUNT=10;

    @Override
    public double calculate(double price) {
        System.out.println("小说");
        if(price>=100) {
            return price-DISCOUNT;
        }
        else
            return price;

    }

}

测试端

package com.zheng;


public class Client {

    public static void main(String[] args) {
        Discount discount,discount1,discount2;
        Book book=new Book();
        double originalPrice=100;//原价

        book.setPrice(originalPrice);
        System.out.println("原价为:"+originalPrice+"元");
        System.out.println("------------------------------");

        discount=new ComputerBook();
        book.setDiscout(discount);
        System.out.println("折扣后的价格:"+book.getPrice());
        System.out.println("------------------------------");
        discount1=new LanguageBook();
        book.setDiscout(discount1);
        System.out.println("折扣后的价格:"+book.getPrice());
        System.out.println("------------------------------");
        discount2=new NovelBook();
        book.setDiscout(discount2);
        System.out.println("折扣后的价格:"+book.getPrice());
    }

}

测试截图
在这里插入图片描述

策略模式优缺点

优点:1、符合开闭原则。2、避免重复的代码。3、可以避免多重条件选择语句。4、提供了一种算法的复用机制,不同的环境类可以方便的复用这些策略类。

缺点:1、无法同时在客户端使用多个策略类。2、将造成系统产生很多具体的策略类。3、客户端必须知道所有的策略类,自行决定使用哪一个策略类。

相关文章
|
3月前
|
存储 Cloud Native 安全
阿里云目前优惠券最新种类、金额及使用区别参考
目前阿里云为用户推出了无门槛优惠券,上云抵扣金、算力补贴优惠券、上云礼包等不同种类的优惠券,助力更多用户优惠上云,但是这些优惠券在领取和使用规则上是不同的,本文为大家介绍目前阿里云的各种优惠券领取和使用注意事项,以供大家了解自己能领取或者申请哪些优惠券,在使用过程中需要注意什么。
阿里云目前优惠券最新种类、金额及使用区别参考
|
3月前
|
Java
上周考试错题类型总结(接口型)
上周考试错题类型总结(接口型)
|
10月前
|
Web App开发 开发工具 数据库
0031Java程序设计-基于B2C的网上拍卖系统—秒杀与竞价毕业设计论文
0031Java程序设计-基于B2C的网上拍卖系统—秒杀与竞价毕业设计论文
47 0
|
4月前
|
移动开发 API 开发者
标准详情API接口h5优惠券到手价信息采集
为了提高用户体验和满足用户需求,开放了其详情API接口,使得第三方开发者可以方便地访问和利用这些商品信息 淘宝详情API接口是淘宝开放平台提供的一套接口,它允许第三方开发者通过编程方式获取淘宝商品详情信息。这些信息包括但不限于商品标题、价格、销量、评价等。开发者可以使用这些信息为自己的应用程序提供支持,从而为用户提供更优质的服务。
|
11月前
【Leetcode -1475.商品折扣后的最终价格 -1544.整理字符串】
【Leetcode -1475.商品折扣后的最终价格 -1544.整理字符串】
41 0
|
C语言 数据安全/隐私保护
用C语言写一个商品购物收银台系统,统计购买商品总价
要制作一个“系统”,就得先把一个个小功能逐一实现,然后将其整合,我们用C语言只需把它们写成一个个函数即可,直接进入正题,我们列出今天所需的头文件,一共五个。
|
架构师 搜索推荐 开发者
会员型网站原型制作|学习笔记
快速学习会员型网站原型制作。
会员型网站原型制作|学习笔记
|
Java Scala 网络架构
商品打折的相关知识点和分析 | 学习笔记
快速学习商品打折的相关知识点和分析
|
存储 Java
Java初学者作业——简单程序根据用户输入的会员类型以及购物金额,判断是否能够享受活动优惠
Java初学者作业——简单程序根据用户输入的会员类型以及购物金额,判断是否能够享受活动优惠
475 0
Java初学者作业——简单程序根据用户输入的会员类型以及购物金额,判断是否能够享受活动优惠