设计一个网上书店,该系统中所有的计算机类图书(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、客户端必须知道所有的策略类,自行决定使用哪一个策略类。

相关文章
|
2月前
|
监控 搜索推荐 数据挖掘
精准定价与促销:CRM中的价格和折扣管理艺术
在当今竞争激烈的商业环境中,CRM系统是企业维持客户忠诚度和提高销售效率的重要工具。其中,价格和折扣的统一管控尤为关键,直接影响企业的盈利能力和市场竞争力。通过集中管理平台,企业能确保各渠道价格一致,避免混乱,维护品牌形象。合理的折扣政策可吸引新客户,提升老客户复购率。利用数据分析优化价格策略,监控并调整政策效果,确保利润最大化。CRM系统的这些功能有助于控制成本、提高客户满意度,最终实现销售增长和利润提升。
|
架构师 搜索推荐 开发者
会员型网站原型制作|学习笔记
快速学习会员型网站原型制作。
120 0
会员型网站原型制作|学习笔记
|
云栖大会 开发者 知识图谱
0元包邮免费拿!乘风者计划邀请您,一起0元包邮抢好礼~
现在扫码邀请好友助力,即可0元包邮免费拿阿里云开发者藏经阁典藏电子书大礼包(内含10本热门书籍)、无线充电器、运动智能手环,一分钱不要花,全部0元包邮送到家!100%的福利给你100%的爱~
0元包邮免费拿!乘风者计划邀请您,一起0元包邮抢好礼~
2019年阿里云910会员节活动『优惠攻略篇』
2019阿里云910会员大促活动已经于8月28日正式开启,从已开放的活动页面来看,整场大促活动由阿里云10年有礼时光机、爆款产品推荐、七大分会场组成。 在910这个秋季大幅度优惠促销日,怎样才能花最少的钱配置最特惠的云服务?小编特为各位用户奉献出省钱大法如下: 丨活动阵地:https://www.
|
人工智能 架构师
活动:新春第一次送书,价值78元 X 3本
新春第一次送书活动,送出3本重量级书籍《深入分布式缓存:从原理到实践》。 作者介绍: 于君泽:蚂蚁金服高级技术专家、花名右军,IT从业超过十五年。
1289 0