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