第九次实验
1. 商场打折程序升级了
老张主持的商场管理系统的打折算法部分经过上次的设计已日趋完善,目前需求方期望打折部分升级适应商场新的经营理念。在经营过程中,为了增加顾客的吸引力,商场开发出一些促销策略,其中一种策略是针对女性商品在打折促销的同时增加赠品,提升顾客粘附力,不同的vip不仅打折程度不同其赠品力度也不一样,大致规则如下图:
赠品fen分类如下图:
考虑到Discount纯抽象的特性,设计成接口更适合设计规则,于是老张将Discount修改成下面的接口形式:
public interface Discount {
default String getInfo(double price) {
double np=getPrice(price);
PresentCampaign pc=selectPresentCapaign(price);
return String.format("原价%.2f,打折后%.2f,给您使用%s包装,赠您一件精美饰品%s", price,np,pc.getBox(),pc.getOrnament());
}
//获得打折后的价格
double getPrice(double price);
//获得不同的赠品策略
PresentCampaign selectPresentCapaign(double price);
}
你能否将原来的打折算法修改为实现Discount接口呢?
2. 聪明的排序器续篇
老张完成了CleverSorter之后受到了大家的交口称赞,但努力的老张是不会停下向前探索的脚步滴,于是在某一天老张发现了java预定义的一个接口:
public interface Comparable<T>{
int compareTo(T o);
}
经过一番研究,java包装的数据类Integer、Double、Float等均已实现Compare接口,该接口定义了实现比较器的类的规约,于是老张希望刚入职的你着手将CleverSorter使用该接口完成,你能完成这个任务吗?
新的测试程序已经给出来了,写完后看看能不能通过这段代码的测试:
public static void main(String[] args) {
Integer [] data= {11,3,25,8,9,36,13,29,10,50};
CleverSorter<Integer> cs=new CleverSorter<Integer>();
cs.sort(data);
for(Integer i:data)System.out.println(i);
Cat[] cats=new Cat[10];
cats[0]=new Cat(11,50);
cats[1]=new Cat(3,10);
cats[2]=new Cat(25,29);
cats[3]=new Cat(8,13);
cats[4]=new Cat(9,36);
cats[5]=new Cat(36,9);
cats[6]=new Cat(13,8);
cats[7]=new Cat(29,25);
cats[8]=new Cat(10,3);
cats[9]=new Cat(50,11);
CleverSorter<Cat> cs2=new CleverSorter<Cat>();
cs2.sort(cats);
for(Cat c:cats)System.out.println(c);
}
执着的老张继续探索比较器接口在java中的定义,于是他又发现了Comparator接口,这个接口更类似于老张当初的抽象类设计,他期望你再按照Comparator接口的定义完成以下你的设计,你能做到吗?(只需要实现Comparator的compare接口即可,Comparator的其他方法不需要考虑)
新的测试代码:
public static void main(String[] args) {
Integer [] data= {11,3,25,8,9,36,13,29,10,50};
CleverSorter<Integer> cs=new CleverSorter<Integer>(new IntegerComparator());
cs.sort(data);
for(Integer i:data)System.out.println(i);
Cat[] cats=new Cat[10];
cats[0]=new Cat(11,50);
cats[1]=new Cat(3,10);
cats[2]=new Cat(25,29);
cats[3]=new Cat(8,13);
cats[4]=new Cat(9,36);
cats[5]=new Cat(36,9);
cats[6]=new Cat(13,8);
cats[7]=new Cat(29,25);
cats[8]=new Cat(10,3);
cats[9]=new Cat(50,11);
CleverSorter<Cat> cs2=new CleverSorter<Cat>(new CatHeightComparator());
cs2.sort(cats);
for(Cat c:cats)System.out.println(c);
}