黑马程序员技术交流社区
标题:
有道练习题我不会了,求帮忙!
[打印本页]
作者:
海枫
时间:
2014-5-20 17:56
标题:
有道练习题我不会了,求帮忙!
本帖最后由 海枫 于 2014-5-20 21:45 编辑
28、超市现在提供3种打折方式,1、打95折,2、打8折,3、买500送100。
要求:写一个打折的抽象父类,并且在父类中提供一个打折的抽象方法,
子类继承父类后,重写父类总的打折抽象方法,在控制台中提示用户请选择一个打折方式,根据用户的输入,
使用简单工厂设计模式获得一个打折的对象,并计算打折后的价钱。(价钱可以自己定义)
怎样使用简单工厂模式过的一个打折对象?
作者:
姜饼不甜
时间:
2014-5-20 19:02
我理解的意思是这样的..
1.先写一个抽象类,里面提供一个抽象方法比如:public abstract double DiscountWay(double Price);
2.然后写3个子类,每个类都继承Discount类并实现抽象方法;但是实现是以不同的3种打折方式实现.
3.写一个静态工厂类:DiscountFactory,里面定义一个public static Discount getDiscount(int i)方法,方法里根据
i的值创建3个不同子类的对象(比如i=1就创建第一种打折方式的子类对象,i==2就创建第二种)
4.在主程序里通过判断获得用户输入的值,通过DiscontFactory返回对象,获得打折后的价钱并返回.
这道题实际上考的就是多态,把子类对象赋给父类变量.希望能够帮到你:)
作者:
Mekor
时间:
2014-5-21 11:28
哥们,我按照你的要求做了一下,看看符不符合你的要求;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 简单的工厂模式_超市打折
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("超市现在提供3种打折方式,1、打95折,2、打8折,3、买500送100。");
Console.WriteLine("请选择:1还是2还是3?");
string str = Console.ReadLine();
DisCount Discount = null;
DiscountFactory Mydis = new DiscountFactory();
switch (str)
{
case "1":
Discount = Mydis.MakeOne();
Discount.Discount();
break;
case "2":
Discount = Mydis.MakeTwo();
Discount.Discount();
break;
case "3":
Discount = Mydis.MakeThree();
Discount.Discount();
break;
default:
break;
}
Console.ReadKey();
}
}
public abstract class DisCount//打折父类
{
public DisCount() { }
public abstract void Discount();
}
public class OneDiscount : DisCount
{
public override void Discount()
{
Console.WriteLine( "打95折");
}
}
public class TwoDiscount : DisCount
{
public override void Discount()
{
Console.WriteLine("打8折");
}
}
public class ThreeDiscount : DisCount
{
public override void Discount()
{
Console.WriteLine("买500送100");
}
}
public class DiscountFactory
{
public OneDiscount MakeOne()
{
return new OneDiscount();
}
public TwoDiscount MakeTwo()
{
return new TwoDiscount();
}
public ThreeDiscount MakeThree()
{
return new ThreeDiscount();
}
}
}
复制代码
作者:
海枫
时间:
2014-5-21 12:09
Mekor 发表于 2014-5-21 11:28
哥们,我按照你的要求做了一下,看看符不符合你的要求;
very thank you!
作者:
茄子
时间:
2014-5-21 12:26
二楼狂赞啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2