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

来源:互联网 发布:2016电信宽带提速软件 编辑:程序博客网 时间:2024/04/28 17:03

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

如:

计算一个图形的面积,周长
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
原创粉丝点击