接口有什么好处?用接口做一个打折功能

同一个目的,但是有多种实现方式,就可以使用接口来进行简便处理

如:

计算一个图形的面积,周长
1.圆形的是XXX计算
2.正方形的是XXXX2计算


下面是一个经典例子

//比如我们要做一个购书系统,购书后,需要进行打折,我们就来实现打折这一部分: 

// 表示一本书 
class Book { 
public String Name; // 书名 
public Double Money; // 价格
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public Double getMoney() {
return Money;
}
public void setMoney(Double money) {
Money = money;
}

//书价打折接口(接口就像一个协议,你不用知道协议后面是什么,只需要知道它遵守了这个协 议),在这里,我们只知道这个接口会进行 打折计算 
interface IBookMoneyComputer { 
Double Compute(Book[] books, Double totalMoney); //计算书价 // 要计算价格的书目 // 书的总价格(打折前的) 

//我们来实现两个打折器(构造两个类来实现IBookMoneyComputer接口)------------------ 
// 总价打折器,只要书总价超过500, 我们就给它减去100 
class TotalMoneyComputer implements IBookMoneyComputer {
public Double Compute(Book[] books, Double totalMoney) { 
if (totalMoney > 500) 
return totalMoney - 100; return totalMoney; 


// 书类别打折器,只要有一本书名为"DotNet",我们就给总价减去50 
class BookTypeComputer implements IBookMoneyComputer { 
public Double Compute(Book[] books, Double totalMoney) { 
for(Book book : books){
if (book.Name == "DotNet") 
return totalMoney - 50; 

return totalMoney;
}


//---------------------------------------------------------------- 
class Class1 { 
// 静态方法,接受一个book数组,和一个打折器,注意,我们这个参数是接口类型
static Double ComputeMoney(Book[] books, IBookMoneyComputer computer) {
//注意,这里的计算打折前的总价程序不需要进行抽象 
Double totalMoney = 0.0; 
for (Book book : books) { 
totalMoney += book.Money; 
}
//用接口类型进行打折,这样有很大的灵活性,可以随时更改打折策略 
return computer.Compute(books, totalMoney); 
}



/// 应用程序的主入口点。
static void Main(String[] args) { 
//我们来购造三本书 
Book book1 = new Book(); 
book1.Name = "aaa"; 
book1.Money = 200.0; 
Book book2 = new Book(); 
book2.Name = "bbb"; 
book2.Money = 400.0; 
Book book3 = new Book(); 
book3.Name = "DotNet"; 
book3.Money = 200.0; 
//可以分别运行两种打折策略来进行打折
System.out.println(ComputeMoney(new Book[] { book1, book2, book3 }, new TotalMoneyComputer()));
System.out.println(ComputeMoney(new Book[] { book1, book2, book3 }, new BookTypeComputer()));
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是Java代码实现: ICourse.java ```java public interface ICourse { String getId(); String getName(); double getPrice(); } ``` JavaCourse.java ```java public class JavaCourse implements ICourse { private String id; private String name; private double price; public JavaCourse(String id, String name, double price){ this.id = id; this.name = name; this.price = price; } @Override public String getId() { return this.id; } @Override public String getName() { return this.name; } @Override public double getPrice() { return this.price; } } ``` JavaDiscountCourse.java ```java public class JavaDiscountCourse extends JavaCourse { public JavaDiscountCourse(String id, String name, double price) { super(id, name, price); } public double getDiscountPrice() { return super.getPrice() * 0.8; } public double getOrigianPrice() { return super.getPrice(); } } ``` Test.java ```java public class Test { public static void main(String[] args) { ICourse course = new JavaCourse("001", "Java基础课程", 1000); System.out.println("原课程:"); System.out.println("课程号:" + course.getId() + ",课程名:" + course.getName() + ",价格:" + course.getPrice()); ICourse discountCourse = new JavaDiscountCourse("002", "Java进阶课程", 2000); System.out.println("打折后的课程:"); System.out.println("课程号:" + discountCourse.getId() + ",课程名:" + discountCourse.getName() + ",价格:" + ((JavaDiscountCourse) discountCourse).getDiscountPrice())); } } ``` 输出结果: ``` 原课程: 课程号:001,课程名:Java基础课程,价格:1000.0 打折后的课程: 课程号:002,课程名:Java进阶课程,价格:1600.0 ``` 这里使用了类型多态,即将JavaDiscountCourse类赋值给了ICourse类型的变量discountCourse,然后调用getDiscountPrice()方法时强制转换为JavaDiscountCourse类型。这样就实现了在不改变原接口和Java课程类的代码的情况下,新增打折功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值