设计模式题目-策略模式(Strategy)

1.题目

设计一个网上书店,该系统中所有的计算机类图书(ComputerBook)每本都有10%的折扣,所有的语言类图书(LanguageBook)每本都有2元的折扣,小说类图书(NovelBook)每100元有10元的折扣。现使用策略模式来设计该系统,绘制类图并编成实现。

2.题解

2.1UML类图

​ 首先是UML类图,如下图所示:在这里插入图片描述

2.2实现代码(C#)

​ 代码如下:

 	abstract class Strategy
    {
        public abstract double Price(double money);
    }
    class PriceContext
    {
        Strategy strategy;
        public PriceContext(Strategy strategy)
        {
            this.strategy = strategy;
        }
        public void GetPrice(double money)
        {
            if (strategy is ComputerBook)
            {
                Console.WriteLine("---计算机图书打折策略---");
            }
            else if (strategy is NovelBook)
            {
                Console.WriteLine("---小说类图书打折策略---");
            }
            else if (strategy is LanguageBook)
            {
                Console.WriteLine("---语言类图书打折策略---");
            }
            Console.WriteLine("打折前的价格为:{0}", money);
            Console.WriteLine("打折后的价格为{0}", strategy.Price(money));
            Console.WriteLine("------------------------");
        }
    }
    class ComputerBook : Strategy
    {
        public override double Price(double money)
        {
            return (money * 0.9);
        }
    }
    class LanguageBook : Strategy
    {
        public override double Price(double money)
        {
            return (money - 2.0);
        }
    }
    class NovelBook : Strategy
    {
        public override double Price(double money)
        {
            int m = (int)money;
            return money - (double)(m / 100 * 10);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            PriceContext pc;
            pc = new PriceContext(new ComputerBook());
            pc.GetPrice(500);
            pc = new PriceContext(new LanguageBook());
            pc.GetPrice(500);
            pc = new PriceContext(new NovelBook());
            pc.GetPrice(500);
            Console.Read();
        }
    }

2.3运行结果

​ 运行结果如下:
在这里插入图片描述

3.资源链接

链接:https://pan.baidu.com/s/1HJ4cQAZui2ZwP942fe8hjg
提取码:4323

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值